7

私はこれを調査するために一日中費やしましたが、私は賢明ではありません:

C++ DLL のメソッドを PInvokes する C# DLL があります。デバッグ モードでコンパイルするときは問題ありませんでしたが、リリース モードでコンパイルすると AccessViolationException が発生します。この問題をグーグルで検索すると、おそらく非準拠の呼び出し規約の問題であることがわかります。コードは C# では次のようになります。

[return: MarshalAs(UnmanagedType.U1)]
[DllImport("Native.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern Boolean AMethod(Int32 mode, byte frame);

および C++ の場合:

extern "C" {
     DLL_EXPORT bool AMethod(int mode, BYTE frame)
     {
      ...
     }
}

VS2010 で __cdecl 呼び出し規約を使用してコンパイルするように C++ プロジェクトを設定しましたが、それでも AccessViolationException が発生し、さらに何ができるかわかりません。私の C++ DLL はサードパーティの DLL を使用していることに注意してください。サードパーティの DLL が使用する呼び出し規約がわかりません。

どんな助けでも大歓迎です!

ああ、私の開発マシンでは例外が発生せず、ターゲット システムでのみ発生します。

4

1 に答える 1

0

このステートメントの並べ替えを試してください:

[DllImport("Native.dll", CallingConvention = CallingConvention.Cdecl)]
[戻り値: MarshalAs(UnmanagedType.U1)]
internal static extern Boolean AMethod(Int32 モード、バイト フレーム);
于 2011-05-09T18:58:46.647 に答える