Devolver objetos de C ++ a Java

Quiero devolver un objeto de c ++ al código java usando JNI.
No necesito usar sus métodos, solo leer sus campos. ¿Cómo puedo hacerlo?
Esta clase es algo como esto:

class MyOutputClass
{
public:
 Array<SomeOtherClass> m_objects1;
 Array<YetAnoterClass> m_objects2;
}

Array es una clase mía, pero usaré la matriz java en su lugar :)

preguntado el 27 de agosto de 11 a las 15:08

Depende del objeto. Probablemente deba ser un POD (o diseño estándar en C ++ 11) para esto. Muéstranos un código. -

ok, agregué un código. Todavía no tengo mucho código JNI :) -

2 Respuestas

Si desea pasar un objeto C ++ a Java, no puede hacerlo. Pero puede crear un objeto Java en nativo y luego devolverlo desde su método nativo.
Eso se haría así:

JNIEXPORT myJavaObj JNICALL Java_cls_getObj
(JNIEnv *env, jobject obj)
{
jclass myClass;

//Find your class
myClass = (*env)->FindClass(env, "()LMyJavaClass;");

jmethodID cons = env->GetMethodID(myClass, "<init>", 
                              "(V)V"); 
jobject obj = env->NewObject(myClass, cons);

//Return the object.
return obj;
}

Puede pasar sus datos en el ctor o acceder a los campos de su objeto y cambiarlos. POR CIERTO. No compilé el código anterior. Pero no debe contener demasiados errores.

Respondido 27 ago 11, 19:08

ok, pero ¿dónde se debe definir este objeto JNI? en el código C ++? - Idov

@ldov: No, este es un objeto java. En el ejemplo, busca una clase Java, encuentra el ctor y luego ejecuta el ctor, también conocido como crear un nuevo objeto. Luego lo devuelve a la parte java y puede usarlo allí. Quizás deberías echar un vistazo al tutorial de JNI. java.sun.com/developer/onlineTraining/Programming/JDCBook/… - mkaes

No sera algo como http://code.google.com/p/protobuf/ or http://msgpack.org/ hacer el trabajo por ti? ¿La idea es crear un servidor / cliente en su código java / c ++ y comenzar a mover objetos? La comunicación general es bastante eficiente, por lo que dudo que la velocidad sea un problema.

Respondido 27 ago 11, 21:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.