繁体   English   中英

如何从 Python 脚本调用 C function?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM