Информация об изменениях

Сообщение Re: Может ли GetModuleHandle(Ex) привести к вызову LoadLibra от 12.07.2018 10:28

Изменено 12.07.2018 10:30 Maniacal

Re: Может ли GetModuleHandle(Ex) привести к вызову LoadLibrary?
Здравствуйте, ksd, Вы писали:

ksd>Коллега утверждает, что вызов GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_PIN, "ModuleName", &ModuleHandle) может привести к вызову LoadLibrary внутри при каких то условиях. Подтверждения в MSDN нет, но и явно опровержение не могу найти. Есть у кого-то точное знание? Заранее спасибо!


Если модуль уже загружен, то GetModuleHandle(Ex) никогда не вызовет LoadLibrary. Если исполняемый файл скомпанован с библиотеками в режиме deferred DLL load и до этого ни разу библиотека не использовалась, то библиотека загрузится, но... GetModuleHandle и GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, "ModuleName", &ModuleHandle) не увеличат счётчик загруженных DLL. Тут нужно быть аккуратнее.
Re: Может ли GetModuleHandle(Ex) привести к вызову LoadLibra
Здравствуйте, ksd, Вы писали:

ksd>Коллега утверждает, что вызов GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_PIN, "ModuleName", &ModuleHandle) может привести к вызову LoadLibrary внутри при каких то условиях. Подтверждения в MSDN нет, но и явно опровержение не могу найти. Есть у кого-то точное знание? Заранее спасибо!


Если модуль уже загружен, то GetModuleHandle(Ex) никогда не вызовет LoadLibrary. Если исполняемый файл скомпанован с библиотеками в режиме deferred DLL load и до этого ни разу библиотека не использовалась, то LoadLibrary для библиотеки будет вызван, но... GetModuleHandle и GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, "ModuleName", &ModuleHandle) не увеличат счётчик загруженных DLL. Тут нужно быть аккуратнее.