我在Python中有一个字节变量,我想传递给C ++函数,然后想要稍后返回字节,也可以通过C ++函数。 C ++代码包含在Swig中。有谁知道我怎么做或有一个基本的例子?我尝试使用void *作为C ++中的类型,但我无法使其工作。
C ++ example.hpp代码:
class MyTestClass {
public:
void set_data(void* data);
void* get_data();
private:
void* data;
};
C ++ example.cpp代码:
void MyTestClass::set_data(void* data)
{
this->data = data;
}
void* MyTestClass::get_data()
{
return data;
}
Swig界面文件:
/* File : example.i */
%module example
%include <std_string.i>
%{
#include "example.hpp"
%}
%include "example.hpp"
测试Python代码:
from example import MyTestClass
test_class = MyTestClass()
data1 = b"test"
test_class.set_data(data1)
data2 = test_class.get_data()
print(data2)
汇编:
swig -c++ -python -modern -py3 example.i
export CC=g++
python setup.py build_ext --inplace
错误:
Traceback (most recent call last):
File "./test.py", line 6, in <module>
test_class.set_data(data_1)
File "example.py", line 119, in set_data
return _example.MyTestClass_set_data(self, data)
TypeError: in method 'MyTestClass_set_data', argument 2 of type 'void *'
答案 0 :(得分:1)
您应该使用char *而不是void *。 此外,您不应该使用
%include <std_string.i>
在example.i文件中,因为它具有将char *转换为字符串的typemap定义。
小问题:你们example.cpp应该#include&#34; example.hpp&#34;有一个MyTestCLass的定义。
答案 1 :(得分:0)
我设法使用cstring.i模板:
%cstring_output_allocate_size(char ** data_out,int * maxdata,NULL)
当我设置数据时,我也设置了大小,我用它来设置maxdata。第三个参数是NULL并且不是空闲的,因为数据只是一个参考。