我正在开发 Win7 和 VS 2010。
我的应用程序调用 LoadLibrary 来加载 A.dll。LoadLibrary 返回 NULL,错误代码是 126,这是我的预期。
然后,如果我不理会我的应用程序,它会在几分钟后崩溃。
Windows 事件查看器中有一条错误消息:
异常代码:0xc0000005
错误的应用程序路径:MyApplication.exe
错误模块路径:A.dll
发生了什么?!我确定我的应用程序只调用一次 LoadLibrary。卸载的 Dll 中如何发生错误?
谢谢~
结果:
再次感谢所有帮助。
最后,我找到了崩溃的原因。
A.dll 中有一个包含消息循环的线程。在卸载 A.dll 之前,我忘了让这个线程退出。应用程序没有立即崩溃,因为它在 GetMessage() 中被阻塞。当它从 GetMessage() 返回时,它崩溃了。
A.dll:
void ThreadFunc (void *) {
while (true) Sleep(10000); // message loop
return ;
}
extern "C" {
__declspec(dllexport) int init() {
_beginthread(ThreadFunc, 0, NULL);
return 0;
}
}
应用 :
typedef int (*FUNC)();
HMODULE hMod = LoadLibrary(TEXT("A.dll"));
FUNC init = (FUNC) GetProcAddress(hMod, "init");
init();
Sleep(1000); // wait for thread to sleep
BOOL freeRet = FreeLibrary(hMod);