別の DLL を動的に複数回呼び出す必要がある DLL を作成しています。呼び出し先をロードしたままにして、DLL がアンロードされたときにアンロードしたいと思います。しかし、Microsoft によれば、それは悪い考えです。
エントリ ポイント関数は、単純な初期化タスクのみを実行する必要があり、他の DLL の読み込みまたは終了関数を呼び出してはなりません。たとえば、エントリ ポイント関数では、LoadLibrary 関数または LoadLibraryEx 関数を直接的または間接的に呼び出すべきではありません。さらに、プロセスの終了時に FreeLibrary 関数を呼び出さないでください。
これが問題のコードです。DLL のエントリ ポイントから LoadLibrary と FreeLibrary を呼び出すべきではない理由を誰か説明できますか?
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call) {
case DLL_PROCESS_DETACH :
if (hLogLib != NULL) FreeLibrary(hLogLib);
break;
}
return TRUE;
}