wvsprintf 函数声明:
如果只在本单元使用可以这样声明:
wvsprintf 函数举例:wvsprintf( Output: PChar; {用于返回的缓冲区} Format: PChar; {格式; 类似与 Format 的格式, 应该是和 C 语言的 printf 的格式相同} arglist: va_list {数组指针} ): Integer; {返回到缓冲区的实际字符串的长度}
wsprintf 函数与 wvsprintf 区别是: wvsprintf 对一组数据; wsprintf 是对一个数据. 声明如下://例一: var buf: PChar; arr: array[0..1] of Pointer; begin buf := PChar(StringOfChar(#0, 255)); {我这样准备缓冲区} arr[0] := PChar('万一'); arr[1] := Pointer(123); wvsprintf(buf, '%s, %d', @arr); ShowMessage(buf); {显示结果: 万一, 123} end; //例二: var buf: PChar; arr: array of Pointer; {和上一例的区别是这里用了动态数组} begin buf := PChar(StringOfChar(#0, 255)); SetLength(arr, Length(arr)+1); arr[High(arr)] := PChar('万一'); SetLength(arr, Length(arr)+1); arr[High(arr)] := Pointer(123); wvsprintf(buf, '%s, %d', PChar(arr)); //wvsprintf(buf, '%s, %d', @arr[0]); {或者这样} ShowMessage(buf); {显示结果: 万一, 123} end;
特别需要说明的是, 在 Delphi 2007 中 wsprintf 函数声明错误, 少了一个参数; 使用时需要自己重新声明一下:wsprintf( Output: PChar; {用于返回的缓冲区} Format: PChar; {格式} Data: Pointer {数据指针} ): Integer; {返回到缓冲区的实际字符串的长度}
如果只在本单元使用可以这样声明:
如果全局使用需要这样声明:... implementation {$R *.dfm} function wsprintf(Output: PChar; Format: PChar; Data: Pointer): Integer; stdcall; external user32 name 'wsprintfA'; ...
wsprintf 函数举例:... function wsprintf(Output: PChar; Format: PChar; Data: Pointer): Integer; stdcall; var Form1: TForm1; implementation {$R *.dfm} function wsprintf; external user32 name 'wsprintfA'; ...
最后用十六进制测试一下它们与 Format 函数的不同(Delphi 的 Format 函数是用汇编重写的, 并非调用 API):function wsprintf(Output: PChar; Format: PChar; Data: Pointer): Integer; stdcall; external user32 name 'wsprintfA'; procedure TForm1.FormCreate(Sender: TObject); var buf: PChar; begin buf := PChar(StringOfChar(#0, 255)); wsprintf(buf, '我是%s', PChar('万一')); ShowMessage(buf); {我是万一} wsprintf(buf, '现在是 %d 年', Pointer(2008)); ShowMessage(buf); {现在是 2008 年} end;
var buf: PChar; arr: array[0..0] of Pointer; i: Integer; begin buf := PChar(StringOfChar(#0, 255)); i := MaxInt; arr[0] := Pointer(i); ShowMessage(Format('%x', [i])); {7FFFFFFF} ShowMessageFmt('%x', [i]); {7FFFFFFF} wvsprintf(buf, '%x', @arr); ShowMessage(buf); {7fffffff} end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧