Utilizar el Java Native Interface (JNI)

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO