Cで作成されたDLLの呼び出しで失敗します

解決


mato  2007-02-07 00:35:24  No: 24800

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側での定義と呼び出しの記述についての不備をご指摘いただければと思います。
宜しくお願いします。


うんと  2007-02-07 01:37:03  No: 24801

stdcall じゃなくて cdecl だとか


mato  2007-02-07 02:04:28  No: 24802

うんと様、指摘ありがとうございます。
呼び出し規約をcdeclに変更して確認したところ、問題の現象が
解決しました。呼び出し規約を掘り下げて確認したいと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加