下面的c-header
typedef struct _node_t {
int value;
struct _node_t* next;
} node_t;
可以翻译如下。
class node_t(Structure):
pass
node_t._fields_ = [
('value', ctypes.c_int),
('next', POINTER(node_t))
]
但是,我无法使用void和call-back函数转换c-header代码。 我应该如何将c-header转换为Python c-types代码?
class PacketHandlerDelegate_D(Structure):
pass
PacketHandlerDelegate_D._fields_ = [
// Delegate object
void *delegate;
// Callback functions
void (*addSampleToA)(void *delegate, int sample1, int sample2);
void (*addSampleToB)(void *delegate, unsigned short int signalfast, unsigned short int signalSlow);
void (*addSampleToC)(void *delegate, char x, char y, char z);
void (*addSampleToD)(void *delegate, unsigned short int sample);
void (*addSampleToE)(void *delegate, short int sample);
答案 0 :(得分:0)
阅读文档,函数指针类型可以由CFUNCTYPE
生成。返回类型void
由None
发出信号。 c_void_p
可用于void指针。
例如:
ADD_SAMPLE_TO_B_TYPE = CFUNCTYPE(None, c_void_p, c_ushort, c_ushort)
...
PacketHandlerDelegate_D._fields_ = [
...
(addSampleToB, ADD_SAMPLE_TO_B_TYPE),
...
]
P.S。因为你在PacketHandlerDelegate_D
中没有递归声明,你可以在类体中定义它们:
class PacketHandlerDelegate_D(Structure):
...
addSampleToB = ADD_SAMPLE_TO_B_TYPE
...