/ / Як я правильно називаю GetLongPathName за допомогою рядків Delphi 2009 та Unicode? - delphi, winapi, unicode, delphi-2009

Як правильно викликати GetLongPathName з використанням Delphi 2009 та Unicode Strings? - Delphi, winapi, unicode, delphi-2009

Мені потрібно змінити старі імена короткого шляху Win98 на довгі імена. У мене був розпорядок роботи, який добре працював з Delphi 4, але коли я перейшов до Delphi 2009 та Unicode, він не працював із рядками Unicode.

Я озирнувся і не міг знайти його сумісну версію Unicode.

Здається, що правильний режим користування є GetLongPathName від WinAPI. Але, схоже, це не знаходиться в бібліотеці SysUtils Delphi 2009, і я не зміг зрозуміти, як правильно це оголосити для доступу до програми WinAPI.

Крім того, здається, що це може бути складно зателефонувати, тому що я читав "Питання ТА": Результат Delphi TPath.GetTempPath обрізається але це не допомогло мені дістатися до першої бази.

Може хтось, будь ласка, пояснить, як оголосити цю функцію та правильно її використовувати, передаючи рядок Unicode в Delphi 2009?

Відповіді:

4 для відповіді № 1

Звичайно. Вам не потрібно окремий блок і ви можете оголосити GetLongPathName де завгодно:

function GetLongPathName(ShortPathName: PChar; LongPathName: PChar;
cchBuffer: Integer): Integer; stdcall; external kernel32 name "GetLongPathNameW";

function ExtractLongPathName(const ShortName: string): string;
begin
SetLength(Result, GetLongPathName(PChar(ShortName), nil, 0));
SetLength(Result, GetLongPathName(PChar(ShortName), PChar(Result), length(Result)));
end;

procedure Test;
var
ShortPath, LongPath: string;
begin
ShortPath:= ExtractShortPathName("C:Program Files");
ShowMessage(ShortPath);
LongPath:= ExtractLongPathName(ShortPath);
ShowMessage(LongPath);
end;