Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Работа с путями в Delphi XE8: получение полного пути DLL-библиотеки

Delphi , Синтаксис , Справочник по API-функциям

Работа с путями в Delphi XE8: получение полного пути DLL-библиотеки

При разработке программ на языке Delphi часто возникает необходимость работы с путями к файлам, в том числе и с путями к DLL-библиотекам. В некоторых случаях, когда используется функция GetModuleFileName, может возвращаться сокращенный путь к файлу, что может быть неприемлемо для дальнейшей работы с этим путем.

Проблема с получением полного пути

При компиляции COM-объекта в Delphi XE8 64-битной версии с использованием следующего кода:

function TUtility.GetDLLPath: WideString;
var
  Buffer: array [0 .. C_MAX_PATH_LEN] of char;
begin
  GetModuleFileName(hInstance, Buffer, Length(Buffer));
  Result := Buffer;
end;

при вызове из VBScript получаем путь в сокращенном виде:

C:\PROGRA~2\XYZ\AAABBB~1\64\Tools.dll

Решение проблемы

Для получения полного пути к файлу необходимо использовать функцию GetLongPathName. Это связано с тем, что GetModuleFileName возвращает путь в том формате, в котором модуль был загружен, и может использовать как короткое, так и длинное имя файла, а также префикс "\?\".

Пример использования GetLongPathName

Вот пример функции, которая принимает сокращенный путь и возвращает полный:

function LongPathName(const ShortPathName: string): string;
var
  Retval: DWORD;
  Buff: array [0..MAX_PATH-1] of Char;
begin
  Retval := GetLongPathName(PChar(ShortPathName), Buff, Length(Buff));
  Win32Check(Retval <> 0);
  Result := Buff;
end;

Обратите внимание, что функция GetLongPathName возвращает количество символов в полном пути, включая завершающий нулевой символ, если оно помещается в буфер указанного размера.

Возможные проблемы и их решения

Если функция GetLongPathName не работает в среде Delphi D2007, возможно, вы пропустили указание соглашения о вызовах. Необходимо добавить stdcall; перед external.... Также важно использовать правильное имя функции: GetLongPathNameA для ANSI-версии или Unicode-версию, если вы работаете с WideString.

Заключение

Для получения полного пути к DLL-библиотеке в Delphi XE8 следует использовать функцию GetLongPathName, которая позволит избежать проблем, связанных с сокращенными путями. Пример кода выше демонстрирует, как можно реализовать такую функцию на Object Pascal.

Создано по материалам из источника по ссылке.

Описание контекста: При работе с путями к DLL-библиотекам в Delphi XE8 для получения полного пути необходимо использовать функцию `GetLongPathName`, так как `GetModuleFileName` может возвращать сокращенный путь.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:41:00/0.0031709671020508/0