我正在研究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);