我需要從c#調用一個C++回調函數,該函數返回一個字符串。當我嘗試使用下面的代碼時,應用程序崩潰很嚴重(有消息說它可能是由於堆損壞)。從C++調用的C++函數指針返回字符串#
這裏的C++代碼:
static String^ CppFunctionThatReturnsString()
{
return gcnew String("From C++");
}
void main()
{
CSharp::CSharpFunction(IntPtr(CppFunctionThatReturnsString));
}
而這裏的C#代碼:
public class CSharp
{
private delegate string CppFuncDelegate();
public static void CSharpFunction(IntPtr cppFunc)
{
var func = (CppFuncDelegate)Marshal.GetDelegateForFunctionPointer(cppFunc, typeof(CppFuncDelegate));
func(); // Crash
}
}
我必須做一些與字符串編組魔法返回之前?
@TorbjörnKalin請勿在代碼中進行此類更改。 更好地指出他們回答的人 –
顯然,這是做到這一點的方法......而且,這樣,我不必擔心被破壞的返回char *(如果它在堆棧中)。謝謝! –
@編碼Mash爲什麼不呢?我的編輯不會改變答案的正確性。我會說這就像修改拼寫錯誤/拼寫錯誤。 –