2011-10-29 17 views
20

Estoy tratando de ejecutar una función en Java (de C) que tiene la siguiente firma:JNI: Paso de múltiples parámetros en la firma de la función de GetMethodID

public void execute(int x, int y, int action); 

Mi problema es definir la firma de función en GetMethodID :

env->GetMethodID(hostClass, "execute", "(I;I;I;)V"); 

El problema es conseguir I m:

W/dalvikvm(1849): Bogus method descriptor: (I;I;I;)V 
W/dalvikvm(1849): Bogus method descriptor: (I;I;I;)V 
D/dalvikvm(1849): GetMethodID: method not found: Lcom/device/client/HostConnection;.execute:(I;I;I;)V 

no estoy seguro de ho w para especificar la firma del método en GetMethodID (para 3 enteros como parámetros). Vi a personas usar el ";" para separar los parámetros en otras publicaciones para la clase String y File, pero nada con primitivos como entero.

¿Cuál sería la forma correcta de hacerlo, por favor?

Gracias.

Respuesta

48

De acuerdo con este file debe usar la firma (III)V. Solo cuando necesite especificar clase totalmente calificada debe usar ';', como Ljava/lang/String;.

+0

¡Muchas gracias! Me ayudaste a resolver mi problema, ¡gracias! – Jary

+0

Ese es un enlace muy útil para resolver todo tipo de problemas de JNI, ¡gracias! –

+0

If es público void execute (String x, int y); ? (Ljava/lang/String; I) V? Error ... – zszen

Cuestiones relacionadas