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

时间:2013-10-23 04:57:12

标签: c# swig

我正在尝试使用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 param出现在C#中。
  • 缓冲区仅为IN。

现在,我只能让len param也出现在C#中,这是我不想要的。

SWIG中是否有内置方法可以做到这一点?如果没有,我很惊讶!如果我必须“手动”完成它的概述是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用SWIG typemaps但这对于普通的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
}