質問: このC ++関数を呼び出す方法は? 私は以下の機能を持っています: ``` bool __declspec(dllexport) COMS_HL7QueryAnswer(char *szZone,char* szMessage, char** o_szAnswer) ``` そして私はこれをC#からPInvokingしています: ``` public static extern bool COMS_HL7QueryAnswer(string szZone,string szMessage, out StringBuilder szAnswer); ``` Windows 2003で動作していますが、W2008でアクセス違反の例外が発生していて、PInvokeの境界内で発生しているようです。どんな助けも素晴らしいでしょう。 ありがとう。 **EDIT:** Looks like the AccessViolationException happens in the PInvoke boundary because: 1. C#以外のコールスタックはありません。 2. デバッガを使用すると、最後のC ++関数までF10できます。終了すると、C#例外ハンドラに移動します。
回答: あなたが使用する必要があります ``` [DllImport(CallingConvention = CallingConvention.Cdecl)] public static extern bool COMS_HL7QueryAnswer(string szZone,string szMessage, out IntPtr szAnswer); ``` p/invokeは、正しい方法を知らないので、データを取得した後にポインタを保持し、正しい解放機能に渡す必要があります。 C ++側を変更することが許されている場合、これをp/invoke-friendlyにするためにできることはたくさんあります。または、C ++/CLIレイヤーを使用することもできます。