Python swig c库和ctypes uint8无效类型
我正在使用swig生成我的C库,例如: mylib.py和_mylib.pydPython swig c库和ctypes uint8无效类型,python,c,swig,ctypes,typemaps,Python,C,Swig,Ctypes,Typemaps,我正在使用swig生成我的C库,例如: mylib.py和_mylib.pyd int func(uint8_t* a) { return *a; } 在python中: import mylib import ctypes a = (ctypes.c_uint8 * 8)() mylib.func(a) 但是运行Python会给我一个错误:TypeError:在方法“func”中,参数1的类型为“uint8*” 我搜索类型映射,并将其添加到.I模块文件中,如下所示: %module
int func(uint8_t* a)
{
return *a;
}
在python中:
import mylib
import ctypes
a = (ctypes.c_uint8 * 8)()
mylib.func(a)
但是运行Python会给我一个错误:TypeError:在方法“func”中,参数1的类型为“uint8*”
我搜索类型映射,并将其添加到.I模块文件中,如下所示:
%module mylib
%include "typemaps.i"
extern int func(uint8_t* INPUT);
python错误将被删除
我打印ctypes.c_uint8和mylib uint8,发现mylib uint8是swig对象。如何做这项工作?我想文档中已经详细描述了这一点,但接下来 测试h
#pragma once
#include <cstdlib>
#include <cstdint>
int func(uint8_t* a, const size_t len);
setup.py
from distutils.core import setup, Extension
setup(name="example",
py_modules=['example'],
ext_modules=[Extension("_example",
["test.i","test.cpp"],
swig_opts=['-c++'],
extra_compile_args=['--std=c++11']
)]
)
使用python setup.py Build\u ext构建--in place
并使用
import example
g = example.new_uint8Array(3)
example.func(g,3)
ctypes
中的类型与您尝试使用的SWIG
不兼容。它们是不同的类型。我建议您将%include“carrays.I”和%array_类(unsigner char,uint8ArrayClass)
包含到您的SWIG
接口文件中,并使用生成的uint8ArrayClass(4)
要为输入生成一个包装的C数组,例如长度为4的数组。您好,谢谢,您能给我看一个简单的文本吗?请在swig手册搜索中查找我提供的关键字
from distutils.core import setup, Extension
setup(name="example",
py_modules=['example'],
ext_modules=[Extension("_example",
["test.i","test.cpp"],
swig_opts=['-c++'],
extra_compile_args=['--std=c++11']
)]
)
import example
g = example.new_uint8Array(3)
example.func(g,3)