Как получить дескриптор модуля моего собственного кода?[дубликат]

StackOverflow https://stackoverflow.com/questions/119706

  •  02-07-2019
  •  | 
  •  

Вопрос

Возможный дубликат:
Как получить HMODULE для текущего исполняемого кода?

Я пытаюсь найти ресурс в своем собственном модуле.Если этот модуль является исполняемым, это тривиально – GetModuleHandle(NULL) возвращает дескриптор «основного» модуля.

Однако мой модуль представляет собой DLL, загружаемую другим исполняемым файлом.Так GetModuleHandle(NULL) вернет дескриптор модуля этому исполняемому файлу, а это явно не то, что мне нужно.

Есть ли способ определить дескриптор модуля, содержащего текущий код?Использование имени DLL при вызове GetModuleHandle() Мне это кажется хаком (и его нелегко поддерживать, если рассматриваемый код пересажен в другую DLL).

Это было полезно?

Решение

Сохраните дескриптор модуля, когда он вам будет предоставлен в DllMain, а затем используйте его позже, когда он вам действительно понадобится.Многие платформы (например, MFC) делают это автоматически.

Другие советы

Если DLL связана с MFC, есть способ получить экземпляр DLL, в котором была вызвана какая-то функция:

void dll_function()
  {
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  HINSTANCE dll_instance = AfxGetInstanceHandle();
  }

Как уже было сказано, это можно сделать, сохранив дескриптор модуля, переданный в функцию DllMain.

Но есть и другие причины, по которым вам следует сохранить ручку.

Например, если вы решите привязать ресурсы к DLL с помощью компоновщика ресурсов, вам понадобится этот дескриптор модуля, чтобы получить доступ к этим ресурсам через ЛоадРесурс API функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top