Desde C Estoy creando un archivo DLL que se carga en Java. Llamo algunas funciones C desde Java y también llamo a funciones Java desde C (con tipos de datos no complejos) - esto funciona bien.¿Cómo transferir una estructura C a java mediante el uso de JNI?
Lucho con la transferencia de una estructura C a Java.
Aquí hay un pequeño ejemplo que describe lo que quiero hacer. No está completo y tal vez no sea correcto porque mi problema es que no estoy seguro de cómo hacerlo.
Mi objetivo es pasar una estructura del tipo "StructType" de C a Java para utilizar los valores en el programa Java.
En C
typedef struct {
unsigned char value1;
unsigned char value2;
} StructType;
void passStructToJava(StructType* myStruct)
{
class cls;
jmethodID mid;
/* GlobalEnv, GlobalObj are globlal values which are already set */
cls = (*GlobalEnv)->GetObjectClass(GlobalEnv, GlobalObj);
mid = (*GlobalEnv)->GetMethodID(GlobalEnv, cls, "receiveStructFromC", "(LPackage/StructType;)V");
(*GlobalEnv)->CallVoidMethod(GlobalEnv, GlobalObj, mid, myStruct);
}
En Java
public class StructType {
public int value1; /* int because there is no uint8 type */
public int value2;
}
public StructType mMyStruct;
public StructType getMyStruct() {
return mMyStruct;
}
public void setMyStruct(StructType myStruct) {
mMyStruct = myStruct;
}
public void receiveStructFromC(StructType myStruct)
{
setMyStruct(myStruct);
}
Gracias de antemano por su ayuda.
Steffen
Gracias Vladimir. La estructura es un poco más compleja que en el ejemplo y necesito usarla. Pero, ¿cómo puedo acceder al objeto java desde la estructura en la función C para usar los setters y getters (siguiendo el ejemplo)? –
actualizó la respuesta. –