我使用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: in method 'func', argument 1 of type 'uint8 *'
我搜索类型映射,并将其添加到我的.i模块文件中,如下所示:
%module mylib
%include "typemaps.i"
extern int func(uint8_t* INPUT);python错误。
我打印ctypes.c_uint8和mylib uint8,我发现mylib uint8是swig对象。如何做这项工作?
发布于 2017-09-08 03:44:42
我认为文档中已经对此进行了完整的描述,但下面是
test.h
#pragma once
#include <cstdlib>
#include <cstdint>
int func(uint8_t* a, const size_t len);test.cpp
#include "test.h"
#include <iostream>
int func(uint8_t* a, const size_t len) {
int result = 0;
for (size_t i = 0 ; i < len ; i++) {
result += int(a[i]);
}
return result;
}test.i
%module example
%{
#include "test.h"
%}
%include "carrays.i"
%include "stdint.i"
%array_functions(uint8_t, uint8Array);
%include "test.h"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_ext --inplace构建并使用测试
import example
g = example.new_uint8Array(3)
example.func(g,3)https://stackoverflow.com/questions/46067853
复制相似问题