Расположение dll

Проблема: Как узнать расположение DLL модуля с кода самого модуля?
Инструментарий: Delphi
Решение: 
Для того чтобы узнать расположение текущей dll из кода, можно воспользоваться winapi функцией GetModuleFileName. С помощью данного метода в результате мы получим полный путь к файлу. Данный метод работает когда модуль загружен в текущий процесс.
Если он находится в другом процессе — нужно воспользоваться функцией GetModuleFileNameEx.

Minimum supported client
Windows XP [desktop apps only]
Minimum supported server
Windows Server 2003 [desktop apps only]

Пример GetModuleFileName:
function GetFilePath: string;
var
ModulePath: array[0..MAX_PATH - 1] of char;
begin
GetModuleFileName(HInstance, ModulePath, MAX_PATH);
Result := ModulePath;
end;

Пример GetModuleFileNameEx (к примеру, нам нужно узнать расположение модуля по идентификатору процесса (PID)):

function GetPIDPath(const PID: cardinal): string;
var
hProcess: THandle;
Path: array[0..MAX_PATH - 1] of char;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
try
if (hProcess = 0) Or (GetModuleFileNameEx(hProcess, 0, Path, MAX_PATH) = 0) then
RaiseLastOSError;
Result := Path;
finally
CloseHandle(hProcess);
end;
end;

Добавить комментарий