需要帮助来理解生成的JNI头文件

时间:2011-03-28 05:47:04

标签: java java-native-interface

我正在阅读JNI教程,我在生成的头文件中遇到了以下行。

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

我可以理解 jbyteArray JNIEnv jobject jstring 的含义。这些都需要通过来自c程序的信息。但是我无法理解为什么使用 JNIEXPORT JNICALL 。这些在c程序中被称为什么(函数,结构,枚举 - 如果这个问题非常简单,我很遗憾)?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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);