0
我有下面的C++函數:PInvoking函數輸出參數
int my_func(char* error) {
// Have access here to an Exception object called `ex`
strcpy(error, ex.what());
return 0;
}
我PInvoking像這樣在C#:
[DllImport("pHash.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int my_func(
[MarshalAs(UnmanagedType.LPStr)]
StringBuilder error);
而且使用這樣的代碼(當然總是C# ):
StringBuilder error = new StringBuilder();
int returnValue = my_func(error);
如果我運行此,程序非常崩潰(意思是崩潰,也不例外剛剛關閉,這就是我T)。我究竟做錯了什麼?
[Matthew](http://stackoverflow.com/a/38117156/5528593)的答案似乎是正確的。但對於你的下一個問題:請告訴我們至少錯誤信息。 「可怕地崩潰」並不像一個異常消息那麼好。 –
有沒有例外,那就是問題所在。該程序退出,這就是它... – Andry
這個函數的接口是無法破解的。您無法防止緩衝區溢出。你必須讓調用者傳遞緩衝區的長度,然後確保你不會複製超出緩衝區的末尾。 –