C++のDLLからC#にstringを返す

スポンサーリンク

はまりました。
const char*はStringで受けるって書いてるんだもん。
大変でした。

簡単に要点だけ。

C++側


__declspec(dllexport) const char* __stdcall GetString()
{
char* str = "hoge";
return hoge;
}

C#側


[DllImport("MemMap.dll", CharSet = CharSet.Ansi)]
private extern static IntPtr GetMemString(String tag);
// -- 使いたいところで・・・
Marshal.PtrToStringAnsi(GetString());

簡単に言うと、戻り値で受ける場合はIntPtrのポインタの形で受けないとダメで、
ポインタで受けるんだからMarshalでポインタから文字列引っこ抜いちゃおうよってこと。
自動でやってくれたらいいのになぁ。
ちょっと不親切なシャープさん。

Returning a std::string from a C++ DLL to a c# program -> Invalid Address specified to RtlFreeHeap

コメント

タイトルとURLをコピーしました