0

我正在尝试使用 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 中是否有内置的方法来执行此操作?如果没有,我很惊讶!如果我必须“手动”执行此操作,有关如何执行此操作的概述是什么?

4

1 回答 1

1

您可以使用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
}
于 2013-10-24T03:03:29.767 回答