私のC++ DLLの関数で、std :: stringをC#アプリケーションに返します。これはかなりのようになります。C++ DLLからC#DLLへのstd :: stringを返す - > RtlFreeHeapに指定された無効なアドレス
std::string g_DllName = "MyDLL";
extern "C" THUNDER_API const char* __stdcall GetDLLName()
{
return g_DllName.c_str();
}
しかし、私のC#のコードは、この関数を呼び出すときに、私は私の出力ウィンドウにこのメッセージが表示されます:
Invalid Address specified to RtlFreeHeap(00150000, 0012D8D8)
C#での関数宣言は次のようになります。
[DllImport("MyDll", EntryPoint = "GetDLLName")]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string GetDLLName();
私がオンラインで見つけたことから、新しいバージョン(デバッグやリリースなど)が削除に使用されている間に矛盾があると、このメッセージが表示されることがあります。しかし、それが私の場合に起こっているのかどうかはわかりません。だから私はそれが何を引き起こしているのかは分かりません。多分MashallAsはそれと関係があるかもしれない?
アイデア?
ありがとうございます!
あなたはすなわち、A見つかったかどうか確認することができます)あなたは、デバッグのために正しい(デバッグ)ライブラリを使用している場合には、などのビルドおよびb)この問題は、両方のデバッグ中に発生し、 c)あなたのC++ dllに/ clrの代わりに/ clr:pureを使ってみてください。 – dirkgently