【问题标题】:Need help on understanding generated JNI header file需要帮助了解生成的 JNI 头文件
【发布时间】:2011-03-28 05:47:04
【问题描述】:

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

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

我能理解jbyteArrayJNIEnvjobjectjstring的意思。这些都是必须通过的进出 c 程序的信息。但我不明白为什么要使用 JNIEXPORTJNICALL。这些在 c 程序中被称为什么(函数,结构,枚举 - 如果这个问题非常琐碎,我很遗憾)?任何帮助表示赞赏。

【问题讨论】:

    标签: java java-native-interface


    【解决方案1】:

    JNIEXPORT 和 JNICALL 是使用的宏 指定调用和链接 JNI 函数的约定和 本机方法实现。

    参见here 第 12.4 节

    例如在我的jvm(Ubuntu 32bit)中,头文件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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2017-06-19
      • 2016-05-03
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多