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;