3

4 つの引数を取り、数値を返す関数を含む C dll を作成しました。次に、C# アプリケーションを作成し、PInvoke を使用して dll 関数を呼び出しました。すべて正常に動作します。次に、dll 関数の引数の数を 4 から 3 に変更しました。ただし、C# のメソッド シグネチャ (DllImport メソッド シグネチャ) は変更しませんでした。驚いたことに、C# からの呼び出しは引き続き成功しますが、dll 関数から予期しない値が返されます。

例外が発生することを予期していましたが、通話は成功しました。P/Invoke を使用して関数呼び出しを行うときに、引数の数を厳密に強制する方法はありますか?

4

1 に答える 1

4

パラメータ数を強制的に一致させる方法はありません。あなたは単にそれを正しくしなければなりません。呼び出し規則、パラメーターの型などについても同じことが言えます。

マネージ コードとは異なり、ネイティブ DLL には、呼び出す方法を説明するメタデータがありません。

p/invoke スタックの不均衡 MDA を有効にすると、実行時に発生したエラーを少なくとも検出できます。

于 2013-04-04T00:19:20.127 に答える