delphi API 函数中使用 PChar 参数的几种方法


本文整理自网络,侵删。

 //以 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;

相关阅读 >>

Delphi mediaplayer 左声道右声道

Delphi idsmtp控件发送邮件

Delphi 快速删除非空文件夹

Delphi 获取标题栏高

Delphi 执行程序并等待完成2

Delphi datetimepicker控件日期格式

Delphi 用tidsmip和tidmessage发送邮件

Delphi 不重启不注销不关explorer刷新注册表

如何让dbgrid显示序号?

Delphi中实现dbgrid列宽度自动调整

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...