Im Moment habe ich eine Funktion, die eine Struktur als Puffer verwendet, um einige Informationen zurückgeben, etwa so:SWIG: Wie man eine Struktur mit% apply zurückgibt? ‚Keine typemaps definiert‘ Warnung
int example_reader(int code, void* return_struct);
Mein Ziel ist es zu machen, so dass, wenn ich diese Funktion wickeln SWIG mit Damit es in Python verwendet werden kann, gebe ich die Struktur zusammen mit dem regulären Rückgabewert der Funktion zurück. Bis jetzt habe ich so mit dem Befehl getan, um das% gilt wie folgt:
%apply struct ret_struct *OUTPUT {void* return_struct};
Allerdings, wenn ich die obige Zeile in meine .i-Datei hinzufügen und versuche SWIG zu laufen, erhalte ich die folgende Warnung:
„Warnung 453: Kann gelten nicht (struct ret_struct * OUTPUT keine typemaps definiert sind.“
ich glaube, ich bin die .h-Datei enthält, die die Struktur zurückkehren ich versuche definiert, also habe ich hatte Probleme, das Problem ausfindig zu machen Bitte korrigieren Sie mich, wenn das Problem mit der unkorrekten Einbeziehung der Struktur zu tun zu sein scheint Ich habe versucht, die SWIG-Dokumentation sowie andere Stack Overflow po durchzulesen M, um eine Ahnung davon zu bekommen, was das Problem sein könnte, aber ich konnte es bis jetzt nicht herausfinden. Das Problem wird etwas komplizierter gemacht, weil ich versuche, einen void-Zeiger auf eine Struktur zurückzugeben, und der Code, den ich zu umbrechen versuche, könnte mehrere Arten von Strukturen haben, die ich zurückgeben kann. Was wäre ein kluger Weg, die Rückkehr dieser Struktur zu bewältigen? Vielen Dank!
Ihre Zielsprache brauchen eine Definition für 'struct ret_struct', so kann man nicht zurückgeben 'void *'. Wenn Sie eine Struktur zuweisen möchten, benötigen Sie einen Doppelzeiger oder eine Zeigerreferenz. Ein typisches Szenario besteht darin, eine Schnittstelle 'typedef struct ReturnStructIF' zu definieren und eine Funktion zu erzeugen, die eine Instanz einer solchen Schnittstelle generiert, und 'int CreateSpecializedStructure (ReturnStructIF ** obj)' und eine Funktion für diese Schnittstelle definiert. –
Können Sie vielleicht ein Beispiel geben? Vielen Dank! – GenericAlias
Fertig. Sie könnten in Erwägung ziehen, die letzten drei Zeilen beginnend mit 'SWIG_NewPointerObj' in die if-Klausel zu verschieben, um nur einen Fehlercode zurückzugeben, wenn Ihr Konstruktor nicht 0 zurückgibt (für Erfolg). –