Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Попытка загрузка библиотеки, или проверка на загруженность"

Answer 897010

Link

Хотя если модуль был загружен то LoadLibrary возвращает его Handle а не бросает ошибку, что странно

На самом деле, в этом нет ничего странного. Загрузка DLL в Windows спроектирована так, чтобы два куска кода в одном процессе могли независимо друг от друга использовать одну и ту же библиотеку. Когда вы вызываете LoadLibrary и библиотека уже загружена, она не просто возвращает дескриптор, а еще и увеличивает счетчик ссылок для этой библиотеки. Последующий вызов FreeLibrary не выгрузит библиотеку сразу, а уменьшит счетчик ссылок, и выгрузит ее только когда счетчик ссылок достигнет нуля. О каком-то "коде ошибки" в данном случае речи не идет, это абсолютно штатная ситуация.

При обычном использовании функций LoadLibrary / GetProcAddress нет особой необходимости задумываться, загружена ли уже библиотека или нет. Если нужно именно проверить, загружена ли библиотека (например, в целях отладки), функция GetModuleHandle подходит: она для незагруженного модуля вернет NULL и GetLastError будет равно 0x0000007E (ERROR_MOD_NOT_FOUND).


Content is retrieved from StackExchange API.

Auto-generated by ruso-archive tools.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX