通过引用将 c++ swig 转换为 python return unsigned char*
swig c++ to python return unsigned char* by reference
我正在使用 swig 将 C++ 函数包装到 python,如下所示:
int getBytes(unsigned char *& result, int length)
我从 中学到了如何通过引用包装一个返回 char* 的函数:
%typemap(in,numinputs=0) char*& (char* tmp) %{
= &tmp;
%}
%typemap(argout) char*& (PyObject* obj) %{
obj = PyUnicode_FromString(*);
$result = SWIG_Python_AppendOutput($result,obj);
%}
%typemap(freearg) char*& %{
free(*);
%}
我试图将其应用于 unsigned char* 但失败了,并收到 SWIG_Python_AppendOutput
无法将 unsigned char** 转换为 signed char** 的错误。我搜索了 python 文档,但没有找到可以将 unsigned char** 转换为 unsigned char** 的函数。
任何人都可以帮忙吗?谢谢!
很久以前我就解决了这个问题,以下是我的解决方案:
%typemap(in, numinputs= 0) (unsigned char *&result, int &length) (unsigned char *temp, int len) %{
= &temp;
= &len;
%}
%typemap(argout) (unsigned char *&result, int &length) %{
PyObject* arg5 = 0;
arg5 = SWIG_FromCharPtrAndSize((const char *)(*), *);
PyObject* temp = NULL;
temp = $result;
$result = PyList_New(1);
PyList_SetItem($result, 0, temp);
PyList_Append($result, (PyObject*)arg5);//unsigned char *&
PyList_Append($result, PyInt_FromLong(*));
Py_DECREF(temp);
%}
我正在使用 swig 将 C++ 函数包装到 python,如下所示:
int getBytes(unsigned char *& result, int length)
我从
%typemap(in,numinputs=0) char*& (char* tmp) %{
= &tmp;
%}
%typemap(argout) char*& (PyObject* obj) %{
obj = PyUnicode_FromString(*);
$result = SWIG_Python_AppendOutput($result,obj);
%}
%typemap(freearg) char*& %{
free(*);
%}
我试图将其应用于 unsigned char* 但失败了,并收到 SWIG_Python_AppendOutput
无法将 unsigned char** 转换为 signed char** 的错误。我搜索了 python 文档,但没有找到可以将 unsigned char** 转换为 unsigned char** 的函数。
任何人都可以帮忙吗?谢谢!
很久以前我就解决了这个问题,以下是我的解决方案:
%typemap(in, numinputs= 0) (unsigned char *&result, int &length) (unsigned char *temp, int len) %{
= &temp;
= &len;
%}
%typemap(argout) (unsigned char *&result, int &length) %{
PyObject* arg5 = 0;
arg5 = SWIG_FromCharPtrAndSize((const char *)(*), *);
PyObject* temp = NULL;
temp = $result;
$result = PyList_New(1);
PyList_SetItem($result, 0, temp);
PyList_Append($result, (PyObject*)arg5);//unsigned char *&
PyList_Append($result, PyInt_FromLong(*));
Py_DECREF(temp);
%}