JNI: jcharArray: warning: cast to pointer from integer of.

  • Themenstarter Themenstarter tuxedo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
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:

Code:
// 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:

Code:
// 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[/code]
 
Hat denn keiner ne Idee ? Hänge immernoch an dem Problem fest und finde keine saubere Lösung.

Gruss
Alex
 
hm...hab von jni bzw. c keine ahnung...
aber: willst du char (primitiver Datentyp) oder Character (Objekt) benutzen ? Vll.liegts ja daran!
 
Ich will einfach nur ein 0815 Standard Java char-Array wie das hier

Code:
/** data as raw-data */
private char[] raw = null;

mittels JNI in C vom Typ jcharArray in den C-Char-Typ umwandeln. Und so wie es in _allen_ SUN Dokus steht klappt es prima mit einem Object-Array und mit einem Integer-Array. Nur bei dem char-Array meckert er.

Gruss
Alex
 
damit klappt es:

Object[] obj..
Integer[] integ...

und damit nicht:

char[] ?


Wie gesagt, Object und Integer sind Klassen, char ist n primitiver Datentyp
 
Laut JNI Tutorial, SUNs Homepage und vielen anderen seiten soll es da genau so funktionieren. Nur gibt keiner ein Beispiel.

Die "CallCharMethod" in C benutzt scheinbar auch keine Sau. Google liefert da erstaunlich wenig Ergebnisse, und davon ist sogut wie nix zu gebrauchen.

Das Problem das ich habe liegt icht auf der JAVA-Seite... Deshalb ist es vermutlich auch eher unwichtig was jetzt Klasse und primitiver Datentyp ist.
Das Problem liegt auf der C-Seite. Wenn ich versuche in C meine Java-Methode die mir das Char[] zurück gibt muss ich das in ein "jcharArray" casten. jcharArray ist die "C" Variante eines Java-Char-Arrays. Und bei dem Catsen kommt der Fehler:

[Warning] cast to pointer from integer of different size

Und genau den Fehler schnall ich nicht. Wie gesagt: Ein Beispiel wie man ein Char-Array das von Java kommt in C einliest habe ich nciht gefunden.

Und ich muss nochmals betonen (in anderen Foren wurde ich schon ziemlich missverstanden): Das hier hat GARNIX mit einem String zu tun. Das Char-Array enthält Rohdaten die eine PCMCIA-Karte liefert, keinen normalen Text.

gruss
Alex
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben