Ich habe eine Funktion in der im HeaderPython ctypes wie kann man optionale Argumente überspringen
IMPORT_FUNCTION int WINAPI GetStuff(int id, StuffStruct* stuff, StuffList *stuffList=NULL);
Im Verpackung diese Funktion mit
mydll.GetStuff.argtypes = [c_int, POINTER(StuffStruct), POINTER(StuffList)]
Einwickeln auch versucht
mydll.GetStuff.argtypes = [c_int, POINTER(StuffStruct)]
ich Skipping muss diese Funktion aufrufen, ohne den letzten Parameter anzugeben. Ich habe versucht, None und erstellen einen Null-Zeiger wie diese POINTER (StuffList)() Ich fühle mich wie ich sollte Prototyp, aber ich weiß es nicht an dieser Stelle.
stuff = StuffStruct()
np = POINTER(StuffList)()
mydll.GetStuff(2, byref(stuff), None) # tried this
mydll.GetStuff(2, byref(stuff), np) # tried this
mydll.GetStuff(2, byref(stuff)) # tried this
Wie wäre es mydll.GetStuff (2, byref (Material), byref (None)) – Gary02127
Das Prototyp sieht aus wie C++ zu mir. C unterstützt keine optionalen Argumente mit Standardwerten. In C können Sie ein Zeigerargument haben, das ignoriert wird, wenn 'NULL', in diesem Fall übergeben Sie es als 'None' über Ctypes. Aber wenn dies wirklich eine C++ - Bibliothek ohne eine gut definierte C-API ist, dann ist es besser, Cython oder CFFI zu verwenden. – eryksun
@eryksun Sie haben Recht, es ist C++ lib, aber mit gut definierten C API ich denke, außer für diesen Moment. Diese Standardwerte funktionieren gut mit Ganzzahlen, da ich 0 gut übergeben kann. Aber NULL-Zeiger ist nicht. – user1750501