今天是个好日子!
我写了一些dll,我在我的项目中使用。在类的构造函数中我加载库lib = LoadLibrary(L"library.dll");
,在析构函数中我使用释放它
if (lib)
FreeLibrary(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 输出端 dllmain 开关 <...> 尝试释放库 DLL_PROCESS_DEATTACH 更正删除成功 输出端 dllmain 开关
FreeLibrary 调用和应用程序冻结后没有消息。