1

我正在开发 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);
4

0 回答 0