Categorías destacadas
programacion php    
Artículo
5
¡votar!

 Utilizar el Java Native Interface (JNI)


Programación JNI en C++

El JNI proporciona un interface sencillo para programadores C++. El fichero jni.h contiene un conjunto de funciones C++ para que el programador del método nativo pueda escribir solo.

jclass cls = env->FindClass("java/lang/String");

en lugar de :

jclass cls = (*env)->FindClass(env, "java/lang/String");

El nivel extra de indirección de env y el argumento env a FindClass están ocultos para el programador. El compilador C++ expandirá las llamadas a las funciones miembros de C++, y por lo tanto el código resultante es exactamente el mismo.

El fichero jni.h también define un conjunto de clases inútiles de C++ para forzar la relación de tipado entre las diferentes variaciones del tipo jobject.

class _jobject {};
class _jclass : public _jobject {};
class _jthrowable : public _jobject {};
class _jstring : public _jobject {};
... /* more on jarray */

typedef _jobject *jobject;
typedef _jclass *jclass;
typedef _jthrowable *jthrowable;
typedef _jstring *jstring;
... /* more on jarray */

Por lo tanto, el compilador C++ puede detectar si se le pasa, un jobject a GetMethodID, por ejemplo.

jmethodID GetMethodID(jclass clazz, const char *name,
                      const char *sig);

ya que GetMethodID espera un jclass. En C, jclass es simplemente lo mismo que jobject.

typedef jobject jclass;

Por lo tanto, un compilador C no puede detectar que se le ha pasado errónamente un jobject en vez de un jclass.

La adición del tipos seguros en C++ tiene un pequeño inconveniente. Recordemos de Acceder a Arrays Java que en C, podemos crear un String Java desde un array de Strings y directamente asignar el resultado a un jstring.

jstring jstr = (*env)->GetObjectArrayElement(env, arr, i);

Sin embargo, en C++, necesitamos insertar una conversión explícita.

jstring jstr = (jstring)env->GetObjectArrayElement(arr, i);

porque jstring es un subtipo de jobject, el tipo de retorno de GetObjectArrayElement.

 
Publicado por:
Ricard Lou Torrijos
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon