Страницы

Поиск по вопросам

вторник, 7 мая 2019 г.

Как получить HINSTANCE модуля в котором находится код?

Как в MS Visual C++ получить HINSTANCE модуля (exe или dll) в котором находится текущая функция?


Ответ

Я согласен, что вариант с __ImageBase можно использовать в определенных случаях, но хотел упомянуть о двух других стандартных методах.
Чаще всего необходимо получить HINSTANCE основной программы (EXE). Для этого проще всего использовать GetModuleHandle(NULL)
Другая типичная ситуация, что мы написали DLL с callback функцией и ее кто-то вызывает. В этом случае у нас обычно есть параменры переданные вазывающим нас модулем. С помощью GetModuleHandleEx с параметром GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS можно получит HMODULE по адесу переменной, а HINSTANCE DLL это и есть HMODULE
Есть конечно много других способов. Но решающим является в каком контексте мы находимся.
Мне лично, в свое время, дало многое для общего поминания программка которую я включил в этот ответ. Она показывает, что огромное виртуальное пространства процесса зазбито на блоки и каждый блок принадлежит своему модулю. Имея начала модуля можно поличить о нем всю информацию. Я полагаю, что GetModuleHandleEx работает примерн так.

Комментариев нет:

Отправить комментарий