我在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
来运行它。消息框显示,但之后它给出了
vahid-win32.dll错误
缺少参赛作品:dllmain
我的DLL出了什么问题?还是和我在一起? : - )
提前致谢
答案 0 :(得分:3)
您的留言箱并非来自您传递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时,它会给出两个消息框,但没有错误。
答案 1 :(得分:1)
没有理由通过DllMain
拨打RunDLL
,加载DLL时会自动调用{{1}}。
而是尝试运行自定义功能。
除此之外,问题可能是导出的名称。您需要为DLL编写.def文件。
DllMain它始终是自动引起的。它会导致通过rundll32,它会被引起,为此目的它是#34;入口点",你反复试图引起它。