Delphi 6。Windows.pasを覗いてみたが、wsprintfは相変わらずstdcallのままであった。D6からはvarargs指令が使えるので、ちょいと実験。
function wsprintf(Output: PChar; Format: PChar): Integer; cdecl; varargs; external user32 name 'wsprintfA'; var Buf: string; N: Integer; begin Memo1.Lines.Clear; N := 64; SetLength(Buf,1024); wsprintf(PChar(Buf),'N: %d %x',N,N); SetLength(Buf,StrLen(PChar(Buf))); Memo1.Lines.Add(Buf); end;
呼べた。確かに呼べた。うー、気色悪…。