JNI Typen-Problem

kroesi

Erfahrenes Mitglied
Hallo !

Habe wieder ein JNI-Problem :

Ich muss von Java aus eine DLL ansprechen und baue mir also eine Wrapper DLL.
Nun verlangt dort eine Methode der DLL ein Int-Array :

Code:
eineMethode(int * arr)

Ich übergebe nun per JNI aus Java heraus ein Int-Array, daraus wird dann

Code:
package_class_eineMethode(JNIEnv * env, jobject o, jintarray jArr)

Die Wrapper DLL schreibe ich im C++Builder 5.

Nun mein Problem : Das jintarray lässt sich mit

Code:
 int * arr = env->GetIntArrayElements(jArr,0);

nicht zum Arbeiten bewegen. Der Compiler gibt nämlich einen Pointer auf ein "long" zurück, nicht auf ein "int". Die ganz oben beschriebene Methode will aber einen Int-Pointer , keinen Long Pointer ! Was mach ich jetzt, wieso ist das so ? Kann ich das irgendwie casten ?

Vielen Dank,

Körsi
 
Hallo!

in der jni_md.h im inlcude Verzeichnis deines JDKs findest du (unter Win32) diese Typ Definition:
Code:
  typedef long jint;

Ein int ist in Java 4 byte gross und vorzeichenbehaftet. Wenn ein int auf deiner Plattform auch 4 byte gross ist (und er die gleiche byteorder wie ein long hat) kannst du IMHO gefahrlos darauf casten.

Gruss Tom
 
Hi,

Tja, ich habs dann einfach gecastet und es klappt. Mache ich mir also Gedanken drüber !

Danke !

Krösi
 
Zurück