P /调用函数传递StringBuilder

And*_*i S 3 c c# pinvoke stringbuilder dllimport

在一个C#文件中,我有一个

class Archiver {
    [DllImport("Archiver.dll")]
    public static extern void archive(string data, StringBuilder response);
}
Run Code Online (Sandbox Code Playgroud)

字符串数据是一个输入,StringBuilder响应是函数写入的东西

归档函数原型(用C编写)如下所示:

void archive(char * dataChr, char * outChr);
Run Code Online (Sandbox Code Playgroud)

它在dataChr中接收一个字符串,然后执行一个

strcpy(outChr,"some big text");
Run Code Online (Sandbox Code Playgroud)

从C#我称之为:

string message = "some text here";
StringBuilder response = new StringBuilder(10000);
Archiver.archive(message,response);
Run Code Online (Sandbox Code Playgroud)

这是有效的,但问题是,你可能会看到我给StringBuilder大小赋值,但是归档函数可能会返回一个比我给我的StringBuilder大小更大的文本.有任何解决这个问题的方法吗?

SLa*_*aks 6

你需要编写一个函数来告诉你需要多大StringBuilder,然后调用该函数来初始化StringBuilder.

  • @andrew,您真的应该考虑将缓冲区的大小也传递给存档函数,这将有助于防止缓冲区溢出,存档应仅将缓冲区填充到缓冲区的大小。 (2认同)