2011-03-28 69 views
3

我正在瀏覽JNI教程,並且在生成的頭文件中遇到了下面的問題。需要幫助瞭解生成的JNI頭文件

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

我可以理解的jbyteArrayJNIEnv的jobject含義的jstring。這些都需要將信息傳遞給並從C程序。但我無法理解爲什麼使用JNDIEXPORT和JNICALL爲什麼是。這些被稱爲c程序(函數,結構,枚舉 - 我很遺憾,如果這個問題很微不足道)?任何幫助表示讚賞。

回答

4

JNIEXPORT和JNICALL是用於 指定主叫和聯動 公約的兩個JNI函數和 本機方法實現宏。

here 12.4節

例如,在我的JVM(Ubuntu的32位),頭文件jni_md.h包含:

#define JNIEXPORT 
#define JNIIMPORT 
#define JNICALL 

這將使你的函數的樣子: jbyteArray Java_ReadFile_loadFile (JNIEnv *,jobject,jstring);

雖然Win32的jni_md.h包含:

#define JNIEXPORT __declspec(dllexport) 
#define JNICALL __stdcall 

由於Windows使用不同的調用約定,你的功能將類似於:

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

感謝名單答覆.. – hnm 2011-03-28 05:56:04