JNI: jcharArray: warning: cast to pointer from integer...
-
Hallo,
habe mit JNI mal wieder folgendes Problem....Ich habe eine Java-Methode die per Getter-Methode ein Char-Array zurück liefert.
Dieses muss ich in meiner C-Wrapper-Klasse an einen Treiber weiterleiten.Ähnliches habe ich bereits mit erfolg mit einem Integer-Array gemacht.
So hats mit dem Integer geklappt:
// get the class of the pdriverConfig-object jclass XLDriverConfigClass = (*env)->GetObjectClass(env, pDriverConfig); // get the method IDs jmethodID getReservedMID = (*env)->GetMethodID(env, XLDriverConfigClass, "getReserved", "()[I"); // call some methods jintArray jreserved = (jintArray)(*env)->CallIntMethod(env, obj, getReservedMID);
Da zwischendrin standen noch mehr Zeilen id eich der Übersichthalber weggelassen hab da sie mit demInt-Array nix zu tun hatten.
Ich habe mir also erst die Klasse meines Objektes das die Getter-Methode kennt besorgt.
Mit dieser Klasse habe ich mir dann die Methoden-ID der Getter-Klasse geholt und damit dann schließlich die getter-Methode aufgerufen. Das Ergebnis habe ich in ein "jintArray" gecasted und schließlich auch in einem "jintArray" gespeichert.Hat prima geklappt.
Gleiches habe ich jetzt analog mit einem Char-Array gemacht:
// get the class of the data object jclass DataClass = (*env)->GetObjectClass(env, dataObject); // get the method IDs jmethodID getRawMID = (*env)->GetMethodID(env, DataClass, "getRaw", "()[C"); // call some methods jcharArray jrawArray = (jcharArray) (*env)->CallCharMethod (env, obj, getRawMID);
Wie gesagt. Beim Integer-Array hat das 1a geklappt. Doch beim Char-Array balert mir der Compiler folgendes um die Ohren:
warning: cast to pointer from integer of different size
Bemängeln tut er hier die Zeile in der das "jcharArray" gecasted und gespeichert wird.
Warum krieg ich hier "pointer from integer" ?? Und was will er da mit der Größe ?
Gruß
Alex
-
hi
da char arrays ja zeichenketten sind.. wäre hier folgendes zu lesen:
Umwandlung von der C- zur Java-Norm:
char buffer[128] ;
jstring jstring_var = (*env)->NewStringUTF (env, buffer) ;Den durch eine UTF-8-Zeichenkette belegten Speicher freigeben:
(*env)->ReleaseStringUTFChars(env, jstring_var, str) ;
http://www.ordix.de/onews2/3_2001/siteengine/artikel/sundd_1.html
bedenke: char ist in java 2 byte, in c 1 byte groß.
-
Verstehe nicht ganz was du mir damit sagen willst... ?! Es geht mir noch nur drum aus einen Java-Char-Array aus java in ein JNI-Char-Array vom Typ "jchararray" zu wandeln. Mit Strings hat das doch weniger zu tun, oder ?
Meine Methode in der Treiber-DLL will als Parameter ein char[], von Java kommt ebenfalls ein char[]... Jetz muss ich nur von java-char[] über jcharArray nach c-char[] konvertieren.
Warum will der Compiler da was mit "Integer" ?
- Alex
-
wie oben schon gesagt: es ist meine vermutung, dass du den char erst in einen java char umwandeln musst. wie gesagt: es sind zwei vollkommen verschiedene typen.
aber ist nur eine vermutung. (teste einfach mal char nach java byte, wenn da kein problem kommt, denke ich, dass meine vermutung stimmt )
-
??? Jetzt versteh ich nur noch Bahnhof... Dachte meine Java/Methode spuckt ein Java CHAR aus ?
-
ich kenne mich mit jni nicht gut aus.
aber wenn ich die liste sehe und folgendes beobachte:java native groesse byte jbyte 8 char jchar 16, unsigned
denke ich mal, du wirst byte nehmen müssen.
-
ps:
im notfall machs wie hier
http://java.sun.com/docs/books/tutorial/native1.1/implementing/example-1dot1/Prompt.c
und mach in java dann ein array aus einem string. (wenn byte nicht sein soll)oder hier
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.htmldu weißt ja, dass ein char array in c im grunde ein string ist?
char a[]={'e','l','i','s','e','\0'};
-
Hi,
entweder steh ich immernoch auf dem schlauch, oder du hast meine Problematik nicht verstanden.Ich habe eine JAVA-Native-methode die ein Char-Array zurückliefert. Dies ist ein NATIVE CHAR ARRAY vom Typ "jcharArray" (von C aus gesehen). Es handelt sich nicht um einen String oder sonst etwas. Einfach nur ein Java-Char-Array das in der Native-Methode in C ein jcharArray ist. Und wenn ich versuche, genau wie es hier:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html#array
mit jobject-Arrays beschrieben ist darauf zuzugreifen dann schlägt dies mit besagtem Fehler (siehe ersten Beitrag in diesem Thread) fehl.
Ich den Wald vor lauter Bäumen nichtmehr.
Hat denn hier noch nie jemand mit JNI und CHAR-Arrays die von JAVA nach C portiert werden MÜSSEN zu tun gehabt ?Gruß
- Alex