我有一个bar.dll
几乎什么都不做的本机 dll ():
它导出一个foo
打开的函数calc.exe
。
它对DLL_PROCESS_ATTACH
.
我在这里读过,一旦其他一切都失败了
PATH 环境变量中列出的目录
被搜索。
我已放置bar.dll
在 PATH 中的文件夹中(当我使用where
它时,它已成功定位)。
但是当我尝试跑步时
rundll32 bar.dll,foo
它失败了
启动 bar.dll 时出现问题
bar.dll 不是有效的 Win32 应用程序。
(我尝试将它编译为 32 位和 64 位)如果我在同一个目录中,它确实有效。
源代码
酒吧.cpp
#include "stdafx.h"
#include "bar.h"
#include <iostream>
BAR_API void __stdcall foo(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
system("calc");
}
酒吧.h
#ifdef BAR_EXPORTS
#define BAR_API __declspec(dllexport)
#else
#define BAR_API __declspec(dllimport)
#endif
#pragma comment(linker, "/EXPORT:foo=_foo@0")
extern "C" {
BAR_API void __stdcall foo(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
}
dllmain.cpp
#include "stdafx.h"
#include "bar.h"
#include <iostream>
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}