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的组件选项卡(component palette)

Delphi 判断字符是否是数字

Delphi 检查字符串是不是 包含 中文和获取中文字符个数

Delphi 百万次重复调用字符分割函数,不耗内存用法

Delphi实现文件下载的几种方法

Delphi编程之win10桌面图标设置

Delphi 计算l两个日期的时间间隔月数,月数差

Delphi反调试【初级】检测法

Delphi 获取指定年月的周、日数 -weeksinayear、weeksinyear、daysinayear、daysinamonth、daysinyear、daysinmonth

Delphi图像hash算法,关于图像相似度问题

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



打赏

取消

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

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

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

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

评论

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