崩溃发生在Dll没有加载

时间:2012-05-11 22:01:29

标签: c++ windows dll

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

0 个答案:

没有答案