Ich wickle eine Bibliothek mit SWIG (Python als Ziel). Die Bibliotheksfunktionen enthalten Parameter mit den Datentypen "uint32_t", "uint8_t" usw. Ich möchte die Schnittstelle so plattformübergreifend wie möglich erstellen, daher möchte ich die ursprünglichen Funktionssignaturen in meiner Datei interface.i
verwenden. Zum Beispiel:Wie erstelle ich eine plattformübergreifende Schnittstelle mit SWIG?
uint32_t func(uint32_t a, uint32_t b);
Die Frage, die ich zu lösen bin versucht, dass SWIG nicht den Parameter als Integer erkennen, es sei denn es eine typedef
auf dem uint32_t
Datentyp ist. Im Moment benutze ich diese auf der Schnittstellendatei:
typedef unsigned uint32_t;
Entfernen dass typedef
Linie die Funktion wird nicht dazu führen zu werden aufrufbar aus dem Ziel Python-Bindung:
>>> mylib.func(2, 2)
TypeError: in method 'func', argument 1 of type 'uint32_t'
Die bisherigen typedef
bin OK auf meine lokale Maschine, könnte aber auf einem anderen Compiler/Plattform anders sein. die Direktive %include "stdint.h"
einen Fehler auf SWIG erhöhen:
/usr/include/stdint.h:44: Error: Syntax error in input(1).
Wich macht Sinn, da SWIG kein voll funktions Compiler ist, und kann den #ifdef
auf diesen Header nicht vollständig auszuwerten.
Wie kann ich SWIG korrekt mit den Datentypen typisieren, die der Compiler für den Header stdint.h
auswählt? Macht es tatsächlich Sinn, die korrekten Datentypen strikt durchzusetzen, oder einfach typedef
alle intX_t
bis long
OK ist?