【发布时间】:2012-04-17 08:17:06
【问题描述】:
大家好!
我写了一些 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 调用和应用程序冻结后没有消息。
【问题讨论】: