我第一次遇到这种块类型不是“java”而是“C”,所以我认为这是同样的兴趣。块定义为:
extern "Java"
{
// some java definition
}
用于向 GCC 指定此块是 java 接口。它用于描述用于定义类的修饰类型。gcc 使用名称 mangling 通过参数等生成函数名称...更多信息在这里:http ://www.agner.org/optimize/calling_conventions.pdf
所以你使用extern "Java"
当您使用它导入 java 代码时,您可以像 C/C++ 中的任何函数一样调用它,而无需指定损坏的名称。我对它的唯一用途是用于定义了一些 C 函数的 dll,并在 C++ 代码中加载,因此我使用外部“C”向 GCC 指定此函数的定义不使用名称修饰。好吧,现在如何在 java 中调用本地方法,因为 java 中的一切都是方法,一切都是对象,没有函数。首先,你必须用java描述你的类,你想用本地语言做的所有功能都必须定义为native:private native void print();
例如。其次,回到您的本机代码头中,您必须按照命名法定义方法:
extern "Java"
{
JNIEXPORT YourReturnType JNICALL Java_ClassName_MethodName (JNIEnv* env, jobject obj);
}
至少,所有方法都必须是这样的,因为 JNI 将在方法中发送一个 JNIEnv 指针和一个将是“this”的对象,如果您有其他参数,则必须在 2 个基础之后给出。最后,您只需在本机代码文件中实现所有方法,始终遵循规范,例如:
JNIEXPORT void JNICALL Jave_Printer_print(JNIEnv* env, jobject obj)
{
printf("Hello world");
}
现在您可以在 Java 中创建一个 Printer 对象并调用定义为 native 的 print 方法。我希望我回答了你的问题。