我制作了一个简短的DLL,它会在进程加载时显示MessageBox。但是,消息框显示两次。因此,看起来DLL导出函数被调用两次。您能否查看我的代码中是否有需要修改的内容,以便MessageBox只显示一次?
rundll32 "path to DLL",sampledllmain
我使用rundll32加载DLL,如下所示:
WebDriver
答案 0 :(得分:2)
如information page about rundll32.exe:
所述
- 它通过
LoadLibrary()
加载指定的DLL。- 它通过
GetProcAddress()
获取功能的地址。- 它调用该函数,传递命令行尾部,即。
醇>
在你的情况下:
LoadLibrary()
时,会调用DllMain
,在您的情况下DllMain
调用sampledllmain
。sampledllmain
sampledllmain
(第二次)。解决您的问题:
dummy
(例如)rundll32 "path to DLL",dummy
PS:在附加说明中,您还可以调试您的dll guides that describe how to do it
在MessageBox
dllMain
的示例
#include <windows.h>
__declspec(dllexport) void sample(void)
{
MessageBox(NULL, "sample text test", "sample title test", 0);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, "attach", "DllMain", 0);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
MessageBox(NULL, "detach", "DllMain", 0);
break;
}
return TRUE;
}
使用rundll32.exe lib.dll,sample