Нужна помощь в понимании сгенерированного файла заголовка JNI - PullRequest
3 голосов
/ 28 марта 2011

Я проходил учебник по JNI и наткнулся на строку ниже в сгенерированном заголовочном файле.

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

Я могу понять значение jbyteArray , JNIEnv , jobject и jstring . Они необходимы для передачи информации в и из программы c.Но я не смог понять, почему используются JNIEXPORT и JNICALL .И как они называются в программе c (function, Structure, Enum - я сожалею, если этот вопрос очень тривиален)?Любая помощь приветствуется.

1 Ответ

4 голосов
/ 28 марта 2011

JNIEXPORT и JNICALL - это макросы, используемые для определения соглашения о вызовах и связях как функций JNI, так и реализаций собственных методов.

См. здесь раздел 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

Поскольку окна используют разные соглашения о вызовах, и ваша функция будет выглядеть так:

__declspec(dllexport) jbyteArray __stdcall Java_ReadFile_loadFile
(JNIEnv *, jobject, jstring);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...