WinAPI: wvsprintf 與 wsprintf – Windows 的格式化輸出函數

來源:互聯網
上載者:User
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;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.