我在 Visual Studio 2010 中创建了一个非常简单的 DLL,这是一个 DLL 类型的 win32 项目。
然后我将 DllMain 更改为:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(0,L"Hey there!",0,0);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
我用了rundll32 vahid-win32.dll,dllmain
来运行它。显示消息框,但之后它给出
Error in vahid-win32.dll
Missing entry: dllmain
我的 DLL 有什么问题吗?或者和我一起? :-)
提前致谢
最佳答案
您的消息框不是来自您传递 DllMain 函数名称。相反,它是自动调用的。但 Rundll32 正在寻找名为 DllMain 的导出函数,其 dllexport 声明如下所示。
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(0,L"Hey there!",0,0);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" __declspec(dllexport) void mydllmain()
{
MessageBox(0,L"Hey there again!",0,0);
}
当您使用参数 mydllmain 调用 RunDll32 时,它会给出两个消息框而不会出现错误。
关于c++ - 为什么 rundll 缺少条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970503/