首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过将可变大小的字符串传递给C++函数,从C#调用它

通过将可变大小的字符串传递给C++函数,从C#调用它
EN

Stack Overflow用户
提问于 2014-04-24 04:38:49
回答 1查看 143关注 0票数 1

我通过向C++代码传递一个字符串来从C#代码中调用它。C++函数负责填充字符串内容。以下是守则:

C#侧:

代码语言:javascript
复制
var abc = new StringBuilder(4096); // need to change this
var result = NativeMethods.SignCrcFile(abc);

C++侧:

代码语言:javascript
复制
bool __cdecl SignCrcFile(char* abc)
{
...
char* tempStr = "Hello All"; //for example
//copy it to abc string.
strcpy(abc,tempStr);
return true;
}

问题是,tempStr在C++函数中的大小是动态的(上面分配给tempStr的只是一个例子)。在这种情况下,将C#侧abc字符串的大小硬编码到4096字节并不是个好主意。一种解决方案可以是在C++端创建2个函数,以便首先获得字符串的大小。然后使用StringBuilder在C#侧分配该大小。然后使用下一个函数获取从C++到C#端的整个字符串。但这可能不是最理想的方法。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-24 04:45:08

字符串生成器尚未被固定为4096个字符,它允许最初容纳4096b,但是当您执行.ToString时,字符串的最终大小将是可变的,最大长度为4096。

如果你害怕这是不够的,那么你可以提高它。

否则,您可以将int*添加到函数调用中,如果char*为空,则将所需的大小放在该int上,这样您就可以在没有字符串生成器的情况下调用函数一次,得到大小,用这样的大小初始化它,然后使用字符串生成器再次调用函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23259968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档