Добрый день, все!FreeLibrary блокирует мое приложение
Я написал некоторую dll, которую я использую в своем проекте. В constuctor класса я загружаю библиотеку 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 Коррекцию удалить успех Out стороны DLLMain переключения
Там нет сообщений после FreeLibrary вызова и приложений замораживания.
В моей dll нет dllMain, а деструкторы называются где-то еще, но это выглядит неправильно. Я попытаюсь создать dllMain и выполнить то, что происходит. – Jeka
Я использую dllMain, но это не решает мою проблему = ( Подробнее см. Вопросы – Jeka
Возможно, ваша DLL также вызывает FreeLibrary, где-то в деструкторе, это может вызвать тупик, поскольку FreeLibrary имеет в ней критический раздел – Pete