はまりました。
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 GetString();
// -- 使いたいところで・・・
Marshal.PtrToStringAnsi(GetString());
簡単に言うと、戻り値で受ける場合はIntPtrのポインタの形で受けないとダメで、
ポインタで受けるんだからMarshalでポインタから文字列引っこ抜いちゃおうよってこと。
自動でやってくれたらいいのになぁ。
ちょっと不親切なシャープさん。
Returning a std::string from a C++ DLL to a c# program -> Invalid Address specified to RtlFreeHeap
コメント