繁体   English   中英

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

[英]Call a c++ method that returns a string, from c#

请帮忙,

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());
        }

无论我在味精中放什么,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());
}

注意:实际上,您也应该将要传入的缓冲区的长度也传递给calculate函数。

我对语法有点朦胧,但是我相信您想要这样的东西:

[DllImport("thecpp.dll")] static extern void calculate([in, out] StringBuilder sMsg);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM