C# 如何调用 C++ dll 的函数入参为 std::string 类型的方法?
时间: 2024-02-19 07:58:41 浏览: 161
在 C# 中调用 C++ 的 DLL 函数,需要使用 Platform Invoke 技术。下面是一个示例代码,演示了如何调用入参为 std::string 类型的 C++ 函数:
```csharp
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("mydll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void MyFunc([MarshalAs(UnmanagedType.LPStr)] string str);
static void Main(string[] args)
{
string myString = "Hello, world!";
MyFunc(myString);
}
}
```
在上述示例代码中,`mydll.dll` 是 C++ DLL 的名称,`MyFunc` 是 C++ 函数的名称,`CallingConvention.Cdecl` 指定了调用约定为 Cdecl。`[MarshalAs(UnmanagedType.LPStr)]` 表示把 C# 的字符串转换成 C 的字符串。注意,C++ 函数需要使用 `extern "C"` 修饰符来指定 C 调用约定。
在 C++ 中的函数定义应该如下:
```cpp
extern "C" __declspec(dllexport) void MyFunc(const char* str)
{
// Do something with str
}
```
在 C++ 中,我们使用 `const char*` 来接收字符串参数。在 C++ DLL 中使用 `__declspec(dllexport)` 导出函数,以便 C# 可以调用它。
阅读全文