みなさん、良い一日を!
プロジェクトで使用するdllを作成しました。クラスIのコンストラクタではライブラリをロード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の呼び出しとアプリケーションのフリーズ後、メッセージは表示されません。