WinAPI: wvsprintf 与 wsprintf - Windows 的格式化输出函数
发布日期:2021-08-29 14:34:29 浏览次数:1 分类:技术文章

本文共 2241 字,大约阅读时间需要 7 分钟。

  hot3.png

wvsprintf 函数声明:

wvsprintf(  Output: PChar;   {用于返回的缓冲区}  Format: PChar;   {格式; 类似与 Format 的格式, 应该是和 C 语言的 printf 的格式相同}  arglist: va_list {数组指针}): Integer;        {返回到缓冲区的实际字符串的长度}
wvsprintf 函数举例:

//例一: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;
wsprintf 函数与 wvsprintf 区别是: wvsprintf 对一组数据; wsprintf 是对一个数据. 声明如下:

wsprintf(  Output: PChar; {用于返回的缓冲区}  Format: PChar; {格式}  Data: Pointer  {数据指针}): Integer;      {返回到缓冲区的实际字符串的长度}
特别需要说明的是, 在 Delphi 2007 中 wsprintf 函数声明错误, 少了一个参数; 使用时需要自己重新声明一下:
如果只在本单元使用可以这样声明:
...implementation{$R *.dfm}function wsprintf(Output: PChar; Format: PChar; Data: Pointer): Integer; stdcall;  external user32 name 'wsprintfA';...
如果全局使用需要这样声明:
...function wsprintf(Output: PChar; Format: PChar; Data: Pointer): Integer; stdcall;var  Form1: TForm1;implementation{$R *.dfm}function wsprintf; external user32 name 'wsprintfA';...
wsprintf 函数举例:

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;
最后用十六进制测试一下它们与 Format 函数的不同(Delphi 的 Format 函数是用汇编重写的, 并非调用 API):

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;

转载于:https://my.oschina.net/hermer/blog/319417

转载地址:https://blog.csdn.net/weixin_34006468/article/details/91783107 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Win7 搭建 FTP 服务器
下一篇:SEO优化技巧总结

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月08日 04时52分02秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java构造函数有什么用_java构造函数有什么用,怎么用 2019-04-21
mysql 匹配 隔开的_按空格分隔关键字并搜索MySQL数据库 2019-04-21
java factory用法_怎样使用Java实现Factory设计模式 2019-04-21
java窗口内容如何复制_求助Java窗口菜单如何实现复制粘贴剪切等功能(内附源代码)... 2019-04-21
盾神与砝码称重java_[蓝桥杯][算法提高VIP]盾神与砝码称重 2019-04-21
java输出狗的各类信息_第九章Java输入输出操作 2019-04-21
java notify怎么用_java 如何使用notify() 2019-04-21
java加载指定文件为当前文本,java:如何使用bufferedreader读取特定的行 2019-04-21
java metrics 怎么样,Java metrics 2019-04-21
在vscode中php语言配置,Visual Studio Code C / C++ 语言环境配置 2019-04-21
php怎么翻译数据库中的中文,javascript – 如何将翻译后的文本插入数据库php 2019-04-21
普朗克公式matlab,用MATLAB实现普朗克函数积分的快捷计算.pdf 2021-06-24
swoolec+%3c?php,PHP+Swoole并发编程的魅力 2021-06-24
php 404配置,phpcms如何配置404 2019-04-21
matlab wash矩阵产生,洗衣机净衣效能与衣损程度的关系分析 2019-04-21
php中如何调用sql server,php调用SQL SERVER 2008及以上版本的方法 2019-04-21
python多线程实现kmeans,3种方式实现python多线程并发处理 2019-04-21
matlab 变量不存在,matlab程序运行时提示变量未定义 2019-04-21
php编码函数 base58,1. Base58可逆加密 2019-04-21
oracle 在需要下列之一,Oracle存储过程中PLS-00103:出现符号“/”在需要下列之一时:(... 2019-04-21