美好的一天,每個人!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