我通过向C++代码传递一个字符串来从C#代码中调用它。C++函数负责填充字符串内容。以下是守则:
C#侧:
var abc = new StringBuilder(4096); // need to change this
var result = NativeMethods.SignCrcFile(abc);C++侧:
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#端的整个字符串。但这可能不是最理想的方法。有什么建议吗?
发布于 2014-04-24 04:45:08
字符串生成器尚未被固定为4096个字符,它允许最初容纳4096b,但是当您执行.ToString时,字符串的最终大小将是可变的,最大长度为4096。
如果你害怕这是不够的,那么你可以提高它。
否则,您可以将int*添加到函数调用中,如果char*为空,则将所需的大小放在该int上,这样您就可以在没有字符串生成器的情况下调用函数一次,得到大小,用这样的大小初始化它,然后使用字符串生成器再次调用函数。
https://stackoverflow.com/questions/23259968
复制相似问题