Python swig c库和ctypes uint8无效类型

Python 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

我正在使用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 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)