C#如何调用C++dll 函数类型std::string
时间: 2023-11-13 13:06:02 浏览: 106
在 C# 中调用 C++ DLL 中的 std::string 类型的函数,需要使用 `StringBuilder` 类来接收返回值。以下是一个示例:
C++ DLL 中的函数:
```cpp
#include <string>
extern "C" {
__declspec(dllexport) void MyCppFunction(std::string& str) {
str = "Hello from C++!";
}
}
```
C# 代码:
```csharp
using System;
using System.Runtime.InteropServices;
using System.Text;
class Program {
[DllImport("MyCppDll.dll")]
public static extern void MyCppFunction(StringBuilder sb);
static void Main() {
StringBuilder sb = new StringBuilder(256);
MyCppFunction(sb);
Console.WriteLine(sb.ToString());
}
}
```
在上述代码中,我们使用 `DllImport` 特性声明了从 C++ DLL 中导入的函数 `MyCppFunction`。由于 `MyCppFunction` 的返回值类型为 `std::string`,我们需要在 C# 代码中使用 `StringBuilder` 类来接收返回值,并将其转换为字符串。在调用 `MyCppFunction` 之前,需要先创建一个 `StringBuilder` 对象,并指定其容量。在调用完 `MyCppFunction` 后,我们可以通过调用 `ToString()` 方法将 `StringBuilder` 对象转换为字符串,并输出到控制台上。
需要注意的是,在 C++ DLL 中,函数的参数类型必须为引用类型,这样才能在 C++ 中修改字符串的值。另外,在 C++ DLL 中使用的字符串编码格式必须与 C# 中使用的字符串编码格式相同,否则可能会出现乱码问题。
阅读全文