0
I以下のC++の関数があります:コード(もちろん、常にC#で、このようなPInvoking機能
[DllImport("pHash.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int my_func(
[MarshalAs(UnmanagedType.LPStr)]
StringBuilder error);
と使用:私はC#でこのようにそれをPInvokingい
int my_func(char* error) {
// Have access here to an Exception object called `ex`
strcpy(error, ex.what());
return 0;
}
を):私はこれを実行すると、プログラムは例外なくクラッシュをある(意味がひどくクラッシュ
StringBuilder error = new StringBuilder();
int returnValue = my_func(error);
だけが閉じ、それは私ですt)。私は間違って何をしていますか?
[マシュー](http://stackoverflow.com/a/38117156/5528593)の回答は正しいようです。しかし、あなたの次の質問については、少なくともエラーメッセージを教えてください。 "ひどくクラッシュする"というのは、例外メッセージと同じくらい良いヒントです。 –
例外はありません、それは問題です。プログラムは終了し、それはそれです... – Andry
この関数のインターフェイスは不可避的に壊れています。バッファオーバーランから保護することはできません。呼び出し元にバッファの長さを渡させ、バッファの最後を超えてコピーしないようにする必要があります。 –