将C#字符串传递给C++并将C++结果(字符串,字符*等)传递给C#

Smj*_*ert 13 c# c++ string interop

我尝试了不同的东西,但我对Interop很生气.

(这里的单词string不是指变量类型,而是"char的集合"):我有一个非管理的C++函数,在dll中定义,我试图从C#访问,这个函数有一个字符串参数和一个字符串返回值,如下所示:

string myFunction(string inputString)
{
}
Run Code Online (Sandbox Code Playgroud)

C++方面应该是什么字符串?和C#one?什么参数需要DllImport呢?

Sco*_*aad 18

我发现最有效的方法是更清楚地了解这里发生了什么.在这种情况下,可能不建议将字符串作为返回类型.

一种常见的方法是让C++端传递缓冲区和缓冲区大小.如果它不足以让GetString放入其中,则修改bufferSize变量以指示适当的大小.然后,调用程序(C#)将缓冲区的大小增加到适当的大小.

如果这是您导出的dll函数(C++):

extern "C" __declspec void GetString( char* buffer, int* bufferSize );
Run Code Online (Sandbox Code Playgroud)

匹配C#将是以下内容:

void GetString( StringBuilder buffer, ref int bufferSize );
Run Code Online (Sandbox Code Playgroud)

因此,要在C#中使用它,您将执行以下操作:

int bufferSize = 512;
StringBuilder buffer = new StringBuilder( bufferSize );
GetString( buffer, ref bufferSize );
Run Code Online (Sandbox Code Playgroud)