gpt4 book ai didi

java - 在理解生成的 JNI 头文件方面需要帮助

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:18 24 4
gpt4 key购买 nike

我正在学习 JNI 教程,我在生成的头文件中遇到了下面一行。

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

我能看懂jbyteArrayJNIEnvjobjectjstring的意思,这些都是需要通过的进出c程序的信息。但我无法理解为什么使用 JNIEXPORTJNICALL。这些在 c 程序中被称为什么(函数、结构、枚举 - 如果这个问题非常微不足道,我很遗憾)?感谢您的帮助。

最佳答案

JNIEXPORT and JNICALL are macros used to specify the calling and linkage convention of both JNI functions and native method implementations.

参见 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);

关于java - 在理解生成的 JNI 头文件方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5455141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com