Ich versuche, ein Byte [] param mit binären Daten und einem String-Parameter von Java an C ++ - Code zu übergeben, indem ich SWIG .
Hier sind meine .i und .cpp Dateien:
my_module.cpp
%Vor%Die generierte Methode im Java-Wrapper:
%Vor%Wie kann ich eine .i-Datei definieren, die einen Java-Wrapper generiert, mit dem ich byte [] anstelle von SWIGTYPE_p_unsigned_char an die compress_buffer_to_file-Methode übergeben kann oder alternativ? Wie verknüpfe ich ein vorhandenes Byte [] auf der Java-Seite mit einem SWIGTYPE_p_unsigned_char?
Ich habe versucht, typemap ohne Erfolg zu verwenden.
SWIG soll eine Konvertierung zwischen Java und C ++ Typen durchführen, nämlich
byte[]
bis unsigned char *
und String
bis char *
. Die allgemeinen Werkzeuge für solche Konvertierungen sind SWIG Typemaps . Praktischerweise werden viele bereits von SWIG bereitgestellt und müssen einfach angewendet werden. Sehen Sie sich die Java typemap-Dokumentation an.
Die letzte Konvertierung ( String
in char *
) wird automatisch von SWIG ausgeführt (mit vordefinierten Typmaps, die char *
Argumente entsprechen).
Eine Standardkonvertierung, die der von Ihnen gewünschten sehr ähnlich ist ( byte[]
bis char *
), wird von den in der Datei definierten " char * BYTE
" Typemaps übernommen. various.i
. Um es zu verwenden, müssen Sie nur
am Anfang der SWIG-Schnittstellendatei, wobei buffer_variable_name
der Name der Variablen im Funktionsargument ist (typemaps kann mit dem Namen verglichen werden). Weitere Informationen finden Sie in der allgemeinen typemap-Dokumentation und in der Java typemap-Dokumentation .
Dies ist jedoch nicht genau das, was Sie wollen, da Ihre Funktion ein unsigned char *
benötigt. Wenn Sie java.nio.Buffer
anstelle von byte[]
auf der Java-Seite verwenden (die über allocateDirect
zugewiesen werden muss), gibt es in various.i
eine andere Gruppe von Typmasken, die über
In Ihrem Fall möchten Sie im Wesentlichen die gleichen wie die bereitgestellten " char * BYTE
" Typemaps, aber für Funktionen, die unsigned char *
verwenden. Sie können diese also einfach von various.i
in eine neue Datei% co_de kopieren % und passe sie ein wenig an:
ubyte.i
%Vor%Verwenden Sie diese auf die gleiche Weise, indem Sie oben in der SWIG-Schnittstellendatei hinzufügen:
%Vor%Wenn Sie diese vordefinierten Typmasken als grundlegendes Beispiel verwenden und die Dokumente lesen, können Sie bei Bedarf eigene benutzerdefinierte Typmasken schreiben.
Hoffe, das hilft.