我需要从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为什么不呢?我的编辑不会改变答案的正确性。我会说这就像修改拼写错误/拼写错误。 –