如何创建从 C++ 中的参数(char* in_buffer,int len)到 Swig 中的 C# 的映射

本文关键字:int buffer len Swig 映射 中的 char 创建 何创建 C++ 参数 | 更新日期: 2023-09-27 18:36:33

我正在尝试使用 SWIG 2.0.11 将 C++ 函数包装在 C# 中。 我想将C++缓冲区作为参数传入,并将其显示为 C# 中的数组。

在C++我有

void process_buffer(unsigned char* in_buffer, int len);

在 C# 中,我希望它显示为

void process_buffer(byte[] in_buffer);

以下是关键要求:

  • 我不在乎数组是否固定。
  • 我不希望 len 参数出现在 C# 中。
  • 缓冲区仅为 IN。

现在,我只能通过让 len 参数也出现在 C# 中来完成这项工作,这是我不想要的。

在SWIG中是否有内置的方法可以做到这一点? 如果没有,我很惊讶! 如果我必须"手动"进行,关于如何去做的概述是什么?

如何创建从 C++ 中的参数(char* in_buffer,int len)到 Swig 中的 C# 的映射

您可以使用 SWIG 类型图,但这对于普通 SWIG 用户来说非常复杂;或者您可以创建一个 C# 函数,将一个 arg(字节数组)转换为接受两个参数的函数:

// yourUtils.cs
using YourCppUtils; // module generated by SWIG, containing process_buffer(char[], int)
void process_buffer(byte[] in_buffer) 
{
    char[] chars = System.Text.Encoding.UTF8.GetString(bytes).ToCharArray();
    process_buffer(chars, chars.Length); // calls the sWIG-wrapped version
}