Каким способом лучше получить дескриптор модуля статической связанной библиотеки DLL (HMODULE) - используя GetModuleHandleEx () или LoadLibrary ()? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть DLL, которая содержит как код (экспортируемые функции), так и данные (двоичные данные, встроенные в качестве ресурса).

Эта DLL статически связана с моей программой (EXE). Чтобы получить доступ к двоичным данным в DLL, мне нужен дескриптор (HMODULE) этой DLL, чтобы я мог передать этот дескриптор Win32 API, таким как FindResource () и др.

Мой запрос состоит в том, какую функцию - LoadLibrary () или GetModuleHandleEx () - я должен использовать в этой статически связанной DLL, чтобы возвращаемый дескриптор был гарантированно ненулевым (то есть действительным) .

Я ссылался на документы MSDN в GetModuleHandleEx (). В нем говорится, что этот API-интерфейс должен использоваться для получения дескриптора уже загруженных модулей, но в нем не говорится, как будет выглядеть поведение при использовании статически связанных (которые также можно считать уже загруженными) библиотек DLL.

LoadLibrary () мне подходит, но меня беспокоит, не повредит ли это дополнительной загрузке статически связанной DLL в адресное пространство моей программы? или будет ли LoadLibrary () просто увеличивать счетчик ссылок DLL?

1 Ответ

2 голосов
/ 19 марта 2019

Статически связанные .DLLs закреплены, они не могут быть выгружены.LoadLibrary и GetModuleHandle ведут себя одинаково на закрепленных .DLL (при условии, что вы передаете правильное имя).

LoadLibrary будет увеличивать счетчик ссылок (на не закрепленных) .DLL, но будетНе меняйте адресное пространство.Вызов LoadLibrary по пути, который еще не загружен, конечно, загрузит новый модуль, где GetModuleHandle не удастся.Если вы передадите имя файла без пути, они будут действовать на уже загруженный файл .DLL, если он есть.

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