2017-10-12 2 views
0

Die c-Header unterWie konvertiert man C-Header in Python Ctypes-Code?

typedef struct _node_t { 
int value; 
struct _node_t* next; 
} node_t; 

Kann wie unten übersetzt werden.

Allerdings kann ich die c-Header-Codes nicht mit void und Call-Back-Funktionen übersetzen. Wie soll ich unter C-Header zu Python C-Typen Code übersetzen?

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); 

]

Antwort

0

Lesen der Dokumentation, Funktionszeigertypen können durch CFUNCTYPE erzeugt werden. Der Rückgabetyp void wird durch None signalisiert. c_void_p kann für einen ungültigen Zeiger verwendet werden.

So zum Beispiel:

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. Da Sie in PacketHandlerDelegate_D keine rekursive Deklaration haben, können Sie diese innerhalb des Klassenkörpers definieren:

Verwandte Themen