以下の内容につきまして教えてください。
function test(data: PChar): Integer; cdecl; varargs; external 'abcd.dll';
のようなDLL呼び出し部があるのですが、環境がDelphi5のため
varargs でエラーになってしまいます。
Delphi5で何か手を加えて利用する方法は無いでしょうか。
よろしくお願いします。
多少手間ですが、使いたい引数分の関数定義を書くことで利用できます。
Win32APIのwsprintfを例にすると、以下のようになります。
// 定義
function wsprintf(Output: PAnsiChar; Format: PAnsiChar; Num: Integer): Integer; cdecl varargs overload; external 'user32.dll' name 'wsprintfA';
function wsprintf(Output: PAnsiChar; Format: PAnsiChar; Num1, Num2: Integer): Integer; cdecl varargs overload; external 'user32.dll' name 'wsprintfA';
// 使い方
wsprintf(buf, '%04d', 1); // bufに'0001'が入る
wsprintf(buf, '%04d, %04d', 1, 123); // bufに'0001, 0123'が入る
すみません、varargsは余分でしたね^^;
正しい定義はこちらです。
function wsprintf(Output: PAnsiChar; Format: PAnsiChar; Num: Integer): Integer; cdecl overload; external 'user32.dll' name 'wsprintfA';
function wsprintf(Output: PAnsiChar; Format: PAnsiChar; Num1, Num2: Integer): Integer; cdecl overload; external 'user32.dll' name 'wsprintfA';
jazzin 様
ご回答ありがとうございます。
成る程、この方法ですね。
実はこの可変引数を使ったDLLは使わずに、別なやり方に
変更しました。
しかし、折角教えて頂いたので、時間見て試して見たいと思います。
ありがとうございました。
ツイート | ![]() |