我第一次遇到这种块类型时,它不是“java”,而是“C”,所以我认为这是同样的兴趣。由以下人员定义的块:
extern "Java"
{
// some java definition
}
用于向 GCC 指定此块是 Java 接口。它用于描述用于定义类的修改类型。gcc使用名称重整来按参数生成函数名称,等等...更多信息在这里 : http://www.agner.org/optimize/calling_conventions.pdf 所以你使用一个当你导入java代码时,你可以像C / C++中的任何函数一样调用它,而无需指定残缺的名称。我唯一使用它是一个dll,其中定义了一些C函数,加载到C++代码中,所以我使用extern“C”来向GCC指定此函数的定义不使用名称重整。好吧,现在如何在java中调用本机方法,因为Java中的所有内容都是方法,所有内容都是对象,没有函数。首先,你必须用java描述你的类,你想在原生语言中做的所有函数都必须被定义为原生的:为了example。其次,回到您的本机代码头,您必须按照命名法定义方法:extern "Java"
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 对象,并调用定义为本机的 print 方法。我希望我回答了你的问题。