2011-03-28 1 views
3

Je suivais le tutoriel JNI et je suis tombé en dessous de la ligne dans le fichier d'en-tête généré.Besoin d'aide pour comprendre le fichier d'en-tête JNI généré

JNIEXPORT jbyteArray JNICALL Java_ReadFile_loadFile 
(JNIEnv *, jobject, jstring); 

Je peux comprendre le sens de jbyteArray, JNIEnv, jobject et jstring .Ces sont tenus de transmettre des informations à et du programme c. Mais je n'ai pas pu comprendre pourquoi sont JNIEXPORT et JNICALL sont utilisés. Et que sont-ils appelés dans le programme c (fonction, Structure, Enum - je regrette si cette question est très triviale)? Toute aide est appréciée.

Répondre

4

JNIEXPORT et JNICALL macros sont utilisées pour spécifier la convention d'appel et la liaison des deux fonctions JNI et implémentations de méthode native.

Voir here section 12.4

Par exemple, dans mon jvm (Ubuntu 32 bits), le fichier d'en-tête jni_md.h contient:

#define JNIEXPORT 
#define JNIIMPORT 
#define JNICALL 

Ce qui fera de votre fonction comme: jbyteArray Java_ReadFile_loadFile (JNIEnv *, jobject, jstring);

Alors que win32 jni_md.h contient:

#define JNIEXPORT __declspec(dllexport) 
#define JNICALL __stdcall 

Puisque les fenêtres utilisent différentes conventions d'appel et votre fonction ressemblera:

__declspec(dllexport) jbyteArray __stdcall Java_ReadFile_loadFile 
(JNIEnv *, jobject, jstring); 
+0

Merci pour la réponse .. – hnm

Questions connexes