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 webbrowser 实用代码收集

Delphi android gps服务

dbgrid的cellclick事件,单击当前行记录的那一行时,不发生

Delphi 如何读取内存中的数据?

Delphi xe7 判断android应用程序中的通信状态类型

Delphi 开启内存泄漏报告模式

Delphi使程序的窗口出现在最前面并激活

settimer函数用法

汇编基础知识

Delphi的字符串与16进制的相互转换函数的汇编代码

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



打赏

取消

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

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

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

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

评论

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