我正在尝试使用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#中,这是我不想要的。
SWIG中是否有内置方法可以做到这一点?如果没有,我很惊讶!如果我必须“手动”完成它的概述是什么?
答案 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
}