C# 如何调用 C++ dll 的函数入参为 std::string 类型的方法?通过包装C++/CLI
时间: 2024-02-19 15:00:02 浏览: 154
std字符串处理C++源程序.zip_CString_C语言代码_std_string
可以通过 C++/CLI 的方式来包装 C++ 的 dll,然后在 C# 中调用包装后的函数。具体步骤如下:
1. 在 Visual Studio 中创建一个 C++/CLI 项目。
2. 在项目中添加对 C++ dll 的引用。
3. 在 C++/CLI 项目中定义一个与 C++ dll 函数签名相同的函数,入参为 System::String 类型。
4. 在 C++/CLI 函数中将 System::String 转换为 std::string 类型,并调用 C++ dll 的函数。
5. 在 C# 中引用 C++/CLI 项目,即可调用包装后的函数。
下面是一个简单示例:
C++ dll 中的函数:
```c++
#include <string>
extern "C" __declspec(dllexport) void foo(std::string str)
{
// do something with str
}
```
C++/CLI 包装函数:
```c++
#include <msclr/marshal_cppstd.h>
#include <string>
using namespace System;
using namespace msclr::interop;
extern "C" __declspec(dllexport) void foo_wrapper(String^ str)
{
std::string str_native = marshal_as<std::string>(str);
foo(str_native);
}
```
在 C# 中调用包装后的函数:
```c#
[DllImport("mycppcli.dll")]
public static extern void foo_wrapper(string str);
// 调用
string str = "hello world";
foo_wrapper(str);
```
阅读全文