私はこれを調査するために一日中費やしましたが、私は賢明ではありません:
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 が使用する呼び出し規約がわかりません。
どんな助けでも大歓迎です!
ああ、私の開発マシンでは例外が発生せず、ターゲット システムでのみ発生します。