[英]How to call C function from Python script?
我是 python 的新手,试图从 python 脚本调用 c 函数。 我遇到了以下错误。
Traceback (most recent call last):
File "mylib.py", line 16, in <module>
b = Buffer(54, ctypes.cast(data, ctypes.POINTER(ctypes.c_int)))
TypeError: too many initializers
我已经实现了 C 程序,如下所示。 一个 function 采用 struct 参数,而另一个采用 struct 作为指针。
mylib.c
#include <stdio.h>
struct buff
{
int size;
int *data;
};
void setBuffer(struct buff b)
{
printf("C Size:%d\n", b.size);
printf("C Data:%d\n", b.data[0]);
}
void getBuffer(struct buff *b)
{
b->size = 3;
b->data[0] = 4;
b->data[1] = 8;
b->data[2] = 16;
}
编译命令:
cc -shared -o mylib.so mylib.c
我的 Python 脚本是:
import ctypes
NUM = 6
fun = ctypes.CDLL("./mylib.so")
class Buffer(ctypes.Structure):
fields_ = [('size', ctypes.c_int),
('data', ctypes.POINTER(ctypes.c_int))]
fun.getBuffer.argtypes = [ctypes.POINTER(Buffer)]
fun.setBuffer.argtypes = [Buffer]
fun.getBuffer.restypes = None
fun.setBuffer.restypes = None
data = (ctypes.c_int * 5)()
b = Buffer(54, ctypes.cast(data, ctypes.POINTER(ctypes.c_int)))
fun.setBuffer(b)
fun.getBuffer(ctypes.byref(b))
print("Size", b.size, "Data", b.data[0])
请帮助我指出我的错误。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.