Как я могу найти фактический путь к загруженной DLL в процессе Windows (XP / Windows 7) - PullRequest
2 голосов
/ 15 июля 2011

Мы создаем DLL для других приложений, чтобы загрузить и использовать некоторые функции в приложении. Библиотека DLL зависит от фактического пути, откуда она загружается.

  <product_home>/bin/<DLL is here>
              |
              |----/configdir/configfile
              |----/lib/<java jarfiles>

Для чтения конфигурационных файлов, загрузки файлов JAR и т. Д. Требуется каталог product_home

Мое приложение для Windows выпускает специальную DLL. Мне нужно найти фактический путь к загруженной DLL в процессе и использовать его для установки переменной "HOME". Это будет использоваться в остальной части обработки. Использование внешней заданной переменной среды иногда приводит к сбою, когда на компьютере присутствует несколько версий DLL. Для меня это выглядит так, как будто DLL может вычислить свой собственный «product_home», пока она может получить фактическое загруженное местоположение.

DLL В этой статье Получение пути / имени вашей DLL предоставляет один из таких способов - (но все же попробовать его успешно. Сгенерированный exe аварийно завершает работу). Это правильный подход?

1 Ответ

6 голосов
/ 15 июля 2011

Либо я не понимаю вашу потребность, либо ссылка, которую вы упоминаете, не то, что вам нужно.Если я вас правильно понимаю, вы бы хотели получить полный путь к определенной DLL, загруженной процессом.Итак, скажем, что DLL это «kernel32.dll», вы хотите получить «c: \ windows \ system32 \ kernel32.dll».Пожалуйста, поправьте меня, если я ошибаюсь.

Если это то, что вы хотите, самый простой способ сделать это будет:

HMODULE hModule = GetModuleHandle(_T("kernel32.dll"));
TCHAR dllPath[_MAX_PATH];
GetModuleFileName(hModule, dllPath, _MAX_PATH);

Проверка на сбои пропущена для краткости - подробнее о GetModuleHandle и GetModuleFileName .

...