【发布时间】:2010-10-22 09:28:15
【问题描述】:
在我的 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 可能与此有关?
有什么想法吗?
谢谢!
【问题讨论】:
-
你能检查一下你发现了什么,即 a) 如果你使用正确的(调试)库进行调试构建等 b) 这个问题在调试和发布构建中都会出现 c) 尝试使用 /clr :pure 而不是 /clr 用于您的 C++ dll。
标签: c# c++ string marshalling