gpt4 book ai didi

python - swig c 库和 ctypes uint8 无效类型

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:11 25 4
gpt4 key购买 nike

我正在使用 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 对象。如何做这项工作?

最佳答案

我认为这在文档中有完整描述,但这里是

测试.h

#pragma once
#include <cstdlib>
#include <cstdint>
int func(uint8_t* a, const size_t len);

测试.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;
}

测试.i

%module example
%{
#include "test.h"
%}

%include "carrays.i"
%include "stdint.i"
%array_functions(uint8_t, uint8Array);

%include "test.h"

设置.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)

关于python - swig c 库和 ctypes uint8 无效类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46067853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com