OS WinXP Pro SP1
Delphi 7 Pro
Cで作成されたDLL内のメソッドの呼び出しについて質問します。
メソッドの呼び出し形式が以下のように定義されています
int FuncHoge(int *err, int mode)
modeを指定すると、int型戻り値に結果が取得され、失敗した場合はerrに
詳細なエラーコードが返ります
Delphi側でこの呼び出しを
function FucnHoge(var arc_errno: Integer; mode: Integer): Integer; stdcall; external 'hoge.dll';
上記のように定義し、呼び出しのテストメソッドとして
procedure TForm1.Button1Click(Sender: TObject);
var
err: Integer;
return: Integer;
begin
return := FucnHoge(err,1);
end;
としました。デバッガで追って行くと、returnに値は取得できているのですが、このメソッドを抜けると
アドレスの読み込み例外が発生します。
エラーコードの定義部分でポインタと変数の扱いに問題があると思われerrの型定義を
^Integerなどとしてみましたが、解消されませんでした。
Delphi側での定義と呼び出しの記述についての不備をご指摘いただければと思います。
宜しくお願いします。
stdcall じゃなくて cdecl だとか
編集 削除うんと様、指摘ありがとうございます。
呼び出し規約をcdeclに変更して確認したところ、問題の現象が
解決しました。呼び出し規約を掘り下げて確認したいと思います。
ありがとうございました。