gpt4 book ai didi

c++ - FreeLibrary 阻止了我的应用程序

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:44 29 4
gpt4 key购买 nike

大家好!

我写了一些我在我的项目中使用的dll。在 I 类的构造函数中加载库 lib = LoadLibrary(L"library.dll");,在析构函数中我使用释放它如果(库)
自由库(lib);

有时在调用 FreeLibrary 时应用程序会阻塞,我做错了什么?

我实现了 dllMain 但这并不能解决我的问题 =(

在.h文件中

BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved );

extern "C" {
static projector::CProjCorrectionsClient* corrections;

void DLLPROJECTOR_EXPORT CorrectionsInit (const char* configFile);
void DLLPROJECTOR_EXPORT CorrectionsApply ();
}

在cpp文件中

BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved )
{
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
qDebug() << "DLL_PROCESS_ATTACH";
corrections = new projector::CProjCorrectionsClient();
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;

case DLL_PROCESS_DETACH:
qDebug() << "DLL_PROCESS_DEATTACH";
delete corrections;
qDebug() << "Corrections delete success";
break;
}
qDebug() << "Out side dllmain switch";
return TRUE;
}

在控制台上我看到这条消息:

DLL_PROCESS_ATTACH外侧主线开关<...>尝试释放库DLL_PROCESS_DEATTACH更正删除成功外侧 dllmain 开关

FreeLibrary 调用和应用程序卡住后没有消息。

最佳答案

确保您没有在等待 DLL_PROCESS_DETACH 中的某个线程。

当 DllMain 被调用时,系统获取内部临界区,如果您在 DllMain 中的代码等待某个线程 T 完成,这可能会导致死锁,该线程在完成时也会想要执行 DLL_PROCESS_DETACH,但是由于系统临界区被获取了它将无限等待导致死锁。

关于c++ - FreeLibrary 阻止了我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10187575/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com