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 memo1 光标跟随鼠标移动

Delphi 2009 之 tballoonhint

Delphi xe2 - 实现无敌关机键

Delphi dbgrideh 的分组统计 datagrouping

[Delphi] 计算目录大小的函数,获得目录文件列表,计算文件的大小

Delphi 当前日期的加减运算

在rad studio Delphi或c++安卓应用中使用自定义java库

Delphi 存储文件到数据库

Delphi从trichedit获得rtf格式文本

Delphi 制作一个内网传播的程序

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



打赏

取消

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

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

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

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

评论

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