Ich habe einen Objektspeicher in Java. Mein C-Programm speichert Daten in Form von Char-Array in Java. Jetzt möchte ich Daten aus meinem Geschäft abrufen. Ich kann keinen Funktionsaufruf finden, der mir ein Char-Array zurückgibt. Wie kann ich das machen?Rückgabe Char Array von Java zu C - JNI
1
A
Antwort
1
Sie müssen eines der verschiedenen APIs verwenden, die von JNI bereitgestellt werden, wahrscheinlich GetCharArrayElements().
Es folgt ein Beispiel aus dem Arbeitscode, der ein Byte-Array von Java in C aufruft (der Code ist eine Funktion, die von Java aufgerufen wird, aber die Mechanik ist identisch).
JNIEXPORT void JNICALL Java_xxx_jniEnqueue(JNIEnv *jep,jobject thsObj,
jlong handle, jbyteArray jvaKey, jint jvaKeyOfs, jint jvaKeyLen, jbyteArray jvaData, jint jvaDtaOfs, jint jvaDtaLen) {
jbyte *jniKey,*jniData;
jthrowable escObj;
jniKey=(*jep)->GetByteArrayElements(jep,jvaKey,0);
jniData=(*jep)->GetByteArrayElements(jep,jvaData,0);
...
memcpy(odp->enqpfx->Msg,jniKey+jvaKeyOfs,(vuns)jvaKeyLen); /* key badly named Msg */
...
// enqueue data using key
if(/* enqueue failed */) {
(*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */
(*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */
throwEscapeObject(jep,escObj);
return;
}
(*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */
(*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */
}
Verwandte Themen
- 1. JNI: Wie „unsigned char *“ von C passieren ++ zu Java
- 2. Konvertierung von JNI Java-Byte [] nach C++ Bytearray, Rückgabe 0
- 3. JNI Android - Konvertieren von char * in Byte-Array und Rückgabe an Java
- 4. Rückgabe Byte-Array in Jni Android?
- 5. Rückgabe C++ - Array zu C#
- 6. Konvertieren Char * Registerkarte [10] zu Java-Objekt (JNI)
- 7. JNI Umwandlung von jstring in char *
- 8. Java JNI UnbefriedigterLinkError C char Zeiger auf Zeiger
- 9. Saving Char von lex zu Array von Char in C
- 10. C++ Char-Array zu Int und Int zu Char-Array
- 11. Java: Rückgabe Array von Funktionen
- 12. java Druck char-Array
- 13. Java Unsigned Char Array
- 14. Array von Char-Arrays C++
- 15. C Array von char deklarieren *
- 16. Speicherverlust beim Aufruf von Java-Code von C mit JNI
- 17. Rückgabe von C-Array an Java mit JNA
- 18. C char-Array Verkettung
- 19. Kann keinen Aufruf von C++ zu Java mit JNI
- 20. Konvertieren von Char-Array zu Liste in Java
- 21. Wie Array (Array von lange in Java) von Java nach C zu übergeben ++ mit Swig
- 22. Rückgabe Array von Objekten von VB6 zu C# mit Interop
- 23. Kompilieren von JNI C inkompatiblen Zeigertyp
- 24. C sizeof char * array
- 25. Char-Array zu hexadezimale Zeichenfolge C++
- 26. JNI Stream binäre Daten von C++ nach Java
- 27. Char-Array in C
- 28. Java Pass Array zu Methode für Berechnung und Rückgabe Array
- 29. Rückgabe numpy Array von einer C-Erweiterung
- 30. C# Char- und Char-Array String zuweisen?
Ihre Frage muss noch ein wenig aufgeräumt werden. Wie speichert Ihr C-Programm etwas in Java? Haben Sie alle Zeichencodierungsprobleme herausgearbeitet? –