Ich versuche, einen C ++ std :: string in einen jstring umzuwandeln und es zurückzugeben. Das wäre einfach mit
%Vor% aber das Problem ist, dass die Zeichenfolge, die ich konvertiere, fast zufällig leere Zeichen darin durchsetzt hat. Dies ist ein Problem für c_str()
, aber nicht für std::string
. NewStringUTF
fängt nur einen Teil des gesamten std::string
ab. Es besteht die Hoffnung, dass std::string
eine length()
-Funktion hat, die die volle Länge erhält und die problematischen char *
-Zeichen ignoriert. length()
Es gibt eine separate Funktion NewString , die benötigt wird in einem jchar * und einer jsize *, also sieht das vielversprechend aus, aber ich kann die std :: string nicht richtig in den jchar * konvertieren. Ich habe versucht, es zu einem Byte-Array zu machen, aber ich habe es wahrscheinlich nicht richtig gemacht. Ich hatte weitere Probleme, das int von vector<char> byteArray(stdString.begin(), stdString.end())
in eine jsize zu konvertieren, die für den NewString-Aufruf erforderlich war.
Ich habe ein bisschen mit std::string
gearbeitet, aber das hat mich nicht sehr weit gebracht, wahrscheinlich weil das die ursprüngliche Zeichenkette zerstört.
Hier ist die grundlegende Startfunktion, die ich mit Strings ohne Nullzeichen hatte:
%Vor%Als Nebenbemerkung wird diese Funktion in einer JNI-Wrapper-Datei verwendet, um das %code% eines Objekts zurückzugeben.
Danke für Hilfe oder Informationsquellen!
Ich habe meine eigene Workaround-Lösung unter Berücksichtigung der Empfehlungen von RedAlert entwickelt.
Java erwartet nun ein Byte [] vom nativen Aufruf:
%Vor% Die toString-Methode ruft diese Methode nun in einem std::string
:
Und die Java-Ebene empfängt die Daten wie folgt:
%Vor%