我正在尝试调用使用结构作为参数的 C 库中的函数。我该怎么做呢?我已经创建了类似于文档中所做的结构的 Ctypes 表示,但我直接传递它不起作用。
我试图找到示例,但我找到的所有示例都传递了指向结构的指针。
我有同样的问题。我有一个 C libxxxx.so 文件和相应的 .h 文件。这就对了。第一个 .h 文件中定义的几个函数原型需要传入堆栈上的结构。该结构在第二个 .h 文件中定义。我查看了 usb1 Python 库包装器,每个结构都作为指向函数原型的指针传递。(有些甚至作为指针的指针。)
我为这个结构做了一个包装:
typedef struct _SE_ADDR{
int slot; /**< The index of the target slot. */
int fpga; /**< The index of the target FPGA. */
int reg; /**< The index of the target register. */
} SE_ADDR;
在 Python 包装器模块中,我创建了一个类来表示这个结构:
class SE_ADDR(Structure):
_fields_ = [('slot', c_int),
('fpga', c_int),
('reg', c_int)]
SE_ADDR_p = POINTER(SE_ADDR) #Pointer to SE_ADDR required for se_waitForData_new
然后在导入包装器后,我以上述@picomacer 的方式使用它:
addr = wrapper.SE_ADDR(0,0,0)
这似乎有效。
没有看到你的代码很难说,但我猜你必须实例化结构。从文档:
from ctypes import *
class POINT(Structure):
_fields_ = [("x", c_int),
("y", c_int)]
point = POINT(10, 20)
最后一行创建了一个名为 point 的 POINT 结构的实例。
如果您可以显示结构定义、如何使用它以及任何错误消息,这将非常有帮助