将 C++ 转换为 Python 通过引用返回无符号 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) %{
$1 = &tmp;
%}
%typemap(argout) char*& (PyObject* obj) %{
obj = PyUnicode_FromString(*$1);
$result = SWIG_Python_AppendOutput($result,obj);
%}
%typemap(freearg) char*& %{
free(*$1);
%}
我尝试将其应用于无符号字符*,但失败了,并收到错误,SWIG_Python_AppendOutput
无法将无符号字符**转换为签名字符**。我搜索了python文档,但没有找到可以将无符号字符**转换为无符号字符**的函数。有人可以帮忙吗?谢谢!
很久以前我就解决了这个问题,以下是我的解决方案:
%typemap(in, numinputs= 0) (unsigned char *&result, int &length) (unsigned char *temp, int len) %{
$1 = &temp;
$2 = &len;
%}
%typemap(argout) (unsigned char *&result, int &length) %{
PyObject* arg5 = 0;
arg5 = SWIG_FromCharPtrAndSize((const char *)(*$1), *$2);
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(*$2));
Py_DECREF(temp);
%}
相关文章:
- 寿命延长从函数返回引用
- 了解C++如何返回引用并绑定到引用
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 从类返回引用向量
- 使用unique_ptr并返回引用,或者我应该使用shared_ptr并在需要时制作副本
- 混淆C++从函数返回引用
- 两个相同的重载运算符[]一个返回引用
- 为什么向量的.at()成员函数返回引用而不是迭代器
- C++使用和返回引用
- 返回 T 引用的 Const 函子禁止赋值
- 返回引用是否也会延长其生存期?
- 如何返回引用,然后递增迭代器
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 我是否需要将 ref 与 make_pair 一起使用才能返回引用?
- 在 vector::at 返回引用后进行更改
- 为什么PyImport_ImportModule返回引用计数为 3 而不是 1 的 PyObject*
- 超出返回引用的单一实例生存期
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- C++ 运算符 += 重载返回引用
- 如何声明接受转发引用并返回引用或副本的函数模板