我需要将旧的Win98短路径名称更改为长路径名称。我有一个适用于Delphi 4的例程,但是当我升级到Delphi 2009和Unicode时,它无法使用Unicode字符串。
我环顾四周,找不到与Unicode兼容的版本。
似乎正确使用的例程是GetLongPathName from the WinAPI。但它似乎不在Delphi 2009的SysUtils库中,我无法弄清楚如何正确地声明它来访问WinAPI例程。
此外,似乎打电话可能很棘手,因为我已经阅读了SO问题:Delphi TPath.GetTempPath result is cropped但这并没有帮助我达到一垒。
有人可以解释一下如何声明这个函数并在Delphi 2009中正确使用它传递一个Unicode字符串吗?
答案 0 :(得分:4)
不确定。您不需要单独的单元,可以在任何地方声明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;