文字列を返す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
}
}
文字列を返す前に、文字列を使って何らかのマーシャリングの魔法をかける必要がありますか?