//以 GetWindowsDirectory 為例:
{ 以靜態數組做緩沖區 }
procedure TForm1.Button1Click(Sender: TObject);
var
buf: array[0..MAX_PATH-1] of Char;
begin
GetWindowsDirectory(buf, SizeOf(buf));
ShowMessage(buf); { C:\\Windows }
end;
{ 自己分配內存 }
procedure TForm1.Button2Click(Sender: TObject);
var
p: PChar;
begin
p := StrAlloc(MAX_PATH);
GetWindowsDirectory(p, StrBufSize(p));
ShowMessage(p); { C:\\Windows }
StrDispose(p);
end;
{ 直接使用 string; 這和下一種方法都需要再刪除尾部空白 }
procedure TForm1.Button3Click(Sender: TObject);
var
str: string;
len: Integer;
begin
SetLength(str, MAX_PATH);
len := GetWindowsDirectory(PChar(str), ByteLength(str));
SetLength(str, len);
ShowMessage(str); { C:\\Windows }
end;
{ 同時, 把 PChar(str) 改為 @str[1] }
procedure TForm1.Button4Click(Sender: TObject);
var
str: string;
len: Integer;
begin
SetLength(str, MAX_PATH);
len := GetWindowsDirectory(@str[1], ByteLength(str));
SetLength(str, len);
ShowMessage(str); { C:\\Windows }
end;
{ 這種方法最好, 先獲取結果的長度... }
procedure TForm1.Button5Click(Sender: TObject);
var
len: Integer;
str: string;
begin
len := GetWindowsDirectory(nil, 0);
SetLength(str, len);
GetWindowsDirectory(PChar(str), len);
ShowMessage(str); { C:\\Windows }
end;