【发布时间】:2011-03-12 20:03:59
【问题描述】:
请帮忙,
my c++ function:
extern "C" REGISTRATION_API void calculate(char* msg)
{
//some calculation here
msg = "some text";
}
我的 C# 调用:
[DllImport("thecpp.dll")]
static extern void calculate(StringBuilder sMsg);
private void button4_Click(object sender, EventArgs e)
{
StringBuilder msg = new StringBuilder();
calculate(msg);
MessageBox.Show(msg.ToString());
}
无论我在 msg 中输入什么,stringbuilder 总是为空?为什么?怎么了?有任何想法吗?请分享
【问题讨论】:
-
您的 C++ 函数存在内存泄漏。
-
在您的 C 代码中,您将值分配给
msg指针本身,而不是指向的内存。我不知道如何解决这个问题。编组,但我只是把它扔在这里,因为两个答案似乎已经错过了。 -
@SLaks:这不是内存泄漏,但我承认将字符串文字分配给指向非 const
char的指针是很可怕的。 -
那么,有什么建议呢?如何解决这个问题?谢谢
-
@SLaks:这不是内存泄漏(仅当您使用 new、malloc 或类似函数时),但 C# 缓冲区将保持不变。他需要更改传入的内存地址中包含的内容,将他的局部变量更改为不同的内存地址不会有任何影响。