function GetModuleFileNameStr(Instance: THandle): string;
var
buffer: array [0..MAX_PATH] of Char;
begin
GetModuleFileName( Instance, buffer, MAX_PATH);
Result := buffer;
end;
GetModuleFileNameStr(Hinstance); // dll name
GetModuleFileNameStr(0); // exe name
Перевод на русский язык:
Функция GetModuleFileName используется для получения полного пути модуля (DLL или EXE) из его инстанс-хандла. Инстанс-хандл можно получить с помощью функции GetModuleHandle для DLL или GetCurrentProcess для основного исполняемого файла.
В вашем коде есть два инстанс-хэндла:
Hinstance: Это инстанс-хандл для DLL (вы передаете его в GetModuleFileNameStr).
0: Это инстанс-хандл для текущего процесса, представляющий основной исполняемый файл.
Чтобы определить полный путь DLL или EXE, вы можете вызвать функцию GetModuleFileName с соответствующим инстанс-хэндлом и сохранить результат в буфере. Функция GetModuleFileNameStr обертывает эту функциональность, объявляя буфер размером MAX_PATH, вызывая GetModuleFileName с этим буфером, и возвращая содержимое буфера в виде строки.
Вот что делает каждая строка:
GetModuleFileName(Instance, buffer, MAX_ PATH): Вызывает функцию GetModuleFileName с инстанс-хэндлом (Instance) и буфером для хранения результата. Третий аргумент (MAX_ PATH) specifies the size of the buffer.
Result := buffer;: Присваивает содержимое буфера (полный путь модуля) переменной Result, которая возвращается функцией.
Когда вы вызываете GetModuleFileNameStr(Hinstance), она получает полный путь DLL с инстанс-хэндлом Hinstance. Когда вы вызываете GetModuleFileNameStr(0), она получает полный путь основного исполняемого файла (процесса самого).
Чтобы получить полный путь DLL или EXE, просто вызовите GetModuleFileNameStr с соответствующим инстанс-хэндлом:
Теперь вы можете использовать эти переменные для доступа к полным путям DLL и EXE.
В статье описывается способ извлечения полного пути к DLL-файлу с помощью функции GetModuleFileName и создания строковой переменной для хранения полученного результата.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.