C++ DLL の関数で、std::string を C# アプリケーションに返しています。次のようになります。
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 はそれと何か関係があるのでしょうか?
何か案は?
ありがとう!