gpt4 book ai didi

c# - 从 c# 调用返回字符串的 c++ 方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:34 28 4
gpt4 key购买 nike

请帮忙,

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 总是空的?为什么?怎么了?有任何想法吗?请分享

最佳答案

你是正确的,你应该为 LPCTSTR 缓冲区使用 string,为 LPTSTR 缓冲区使用 StringBuilder

但是您需要进行 2 处更改:

1) 设置 StringBuilder 的容量
2) 你应该在那个缓冲区中执行 strcpy ,改变那个变量保存的内存地址不会像你现在那样做任何事情。您需要更改内存地址中的内容。

所以你想要在你的 C/C++ 代码中:

extern "C" REGISTRATION_API void calculate(LPSTR msg)
{
//Also consider refactoring this function to take in the buffer length
strcpy(msg, "some text");
}

在 C# 中:

[DllImport("thecpp.dll", CharSet=CharSet.Ansi)]
static extern void calculate(StringBuilder sMsg);

private void button4_Click(object sender, EventArgs e)
{
StringBuilder msg = new StringBuilder(1024);
calculate(msg);
MessageBox.Show(msg.ToString());
}

注意:您确实应该将要传递给计算函数的缓冲区的长度也传递进去。

关于c# - 从 c# 调用返回字符串的 c++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3195261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com