Tengo un método JNI para acceder al método java que devuelve un objeto Integer. No deseo devolver el tipo int primitivo porque este código se modificará para manejar objetos genéricos. Lo siguiente es lo que tengo. No puedo obtener el valor del número entero que paso. La salida en el lado C++ es algo así comoJNI cómo acceder a Java Object (Integer)
value = 0x4016f3d0
¿Cómo puedo obtener el valor real del objeto entero que me pase en C++ final?
Por favor ayuda.
Gracias,
-H
GenericPeer.cpp
JNIEXPORT void JNICALL Java_GenericPeer_print (JNIEnv *jenv, jclass jcls, jobject data){
jclass peerCls = jenv->GetObjectClass(data);
jmethodID mGetValue = jenv->GetMethodID(peerCls, "getValue","()Ljava/lang/Integer;");
if(mGetValue == NULL){
return (-1);
}
jobject value = jenv->CallObjectMethod(data, mGetValue);
cout<<"value = "<<value<<endl;
}
GenericPeer.java
public class GenericPeer {
public static native void print(Data d);
static {
System.load("/home/usr/workspace/GenericJni/src/libGenericJni.so");
}
}
Data.j ava
public class Data {
private Integer value;
pubilc Data(Integer v){
this.value = v;
}
public Integer getValue() { return value; }
public void setValue(Integer value) {
this.value = value;
}
}
Test.java (clase principal)
public class Test {
public static void main(String[] args){
Integer i = new Integer(1);
Data d = new Data(i);
GenericPeer.print(d);
}
}
alta, por encima de código no funciona para mí .. – RAJESH
Por qué 'Ljava/lang/Integer;' y no 'Ijava/lang/Integer;'? –