может ли Dllmain использовать FreeLibrary? - PullRequest
4 голосов
/ 27 декабря 2011

Я хочу создать dll, которая самостоятельно выгрузит себя в случае какого-либо условия, что означает

BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call==DLL_PROCESS_ATTACH)
if (!CheckSomething()) //check if a file doesnt exists for example
FreeLibrary(hModule);

}

Я попробовал, но не смог заставить его работатьесли есть обход альтернативного решения.пожалуйста, скажите мне, я не хочу, чтобы процесс, который приложил dll, чтобы выгрузить это, я хочу, чтобы это выгружало это самостоятельно

Ответы [ 2 ]

14 голосов
/ 27 декабря 2011

Невозможно выгрузить DLL, она еще не загружена .Вот для чего возвращение BOOL.Если вы не хотите загружать DLL, верните FALSE.

0 голосов
/ 08 июля 2014

Если вы вызываете FreeLibrary в основной функции dll, вы должны увидеть сообщение об ошибке.Потому что вызов функции FreeLibrary выполнен успешно.Но обратный адрес FreeLibrary освобождает память.Итак, процесс вызывает сбой! (Нарушение прав доступа).

Если вы хотите увидеть исходный код «Dll Self Unloading»: Dll Self Unloading

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...