【发布时间】:2014-07-26 11:23:50
【问题描述】:
我在 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 有什么问题?还是和我一起? :-)
提前致谢
【问题讨论】:
-
致未来读者:我在 Windows XP (SP3) 上尝试这个,对我来说,我什至无法得到弹出窗口(即消息框)但是对第一行: BOOL APIENTRY DllMain(...) to extern "C" BOOL APIENTRY DllMain(...) 帮助(注意,对我来说,它并没有解决整个“事情”之后弹出的错误,所以未来的读者应该关注@Haja Maideen 下面提供的答案)我只是注意到这一点是为了帮助未来的用户,这可能很有用。 (希望)编辑:如果这在某种程度上是错误的,如果有人指出这一点,我将不胜感激!谢谢。
-
改进的评论:忽略我上面的评论,谢谢:(我没有大小来发布这个)而不是只有 extern "C" 然后 BOOL APIENTRY ... 像这样:extern "C" _declspec(dllexport) BOOL APIENTRY ...(就像下面的@Haja Maideen 所说)这(对我来说,在 Windows XP sp3 上)修复了任何错误消息,并加载了消息框。 (我做到了:在提升的 cmd 中:rundll32.exe "thedllfile.dll", mydllmain)如果这在某种程度上是错误的,如果有人指出这一点,我将不胜感激!谢谢。