美好的一天,每个人!FreeLibrary阻止我的申请
我写了一些dll,我在我的项目中使用。在I类加载库的构造函数中,我在析构函数中释放它使用 if (lib) FreeLibrary(lib);
某些时候应用程序块调用FreeLibrary时,我做错了什么?
我实现的DllMain但这不是在CPP文件解决我的问题=(
在.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 ();
}
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则通话和应用程序冻结任何消息。
在我的dll中没有dllMain,析构函数被称为其他地方,但它看起来不对。我将尝试创建dllMain并确定发生了什么。 – Jeka 2012-04-18 10:11:01
我执行dllMain,但这不是解决我的问题=( 查看详情 – Jeka 2012-04-24 10:17:32
也许你的DLL也调用FreeLibrary,在析构函数的某处?这可能会导致死锁,因为FreeLibrary中有一个关键部分 – Pete 2012-04-25 13:44:46