是否JNIEXPORT
或JNICALL
必须在实现 JNI 本机方法的函数声明中使用,该方法不是从动态库加载的,而是使用 JNI 函数注册的RegisterNatives
?
例如:
/* Is JNIEXPORT or JNICALL required here? */
JNIEXPORT void JNICALL test(JNIEnv *env, jobject obj) {
/* ... */
}
JNINativeMethod method = {"test", "()V", (void*)test};
env->RegisterNatives(cls, &method, 1);
我的理解是这JNICALL
是必需的,因为它指定了正确的调用约定,但JNIEXPORT
不是必需的,因为它用于从动态库中导出函数。但是,我没有在 JNI 文档中找到确认。