我是JNI
的新手,但在我想在项目中使用遗留dll时,我已经阅读了很多关于JNI
的信息。
很快,我发现我不能参数到本机方法。这是一个我尝试编码但没有成功的例子:
Hello.java:
package HelloWorld;
Public class Hello {
Private static native int HelloWorld();
Private static native int Mirror(int a);
Static {
System.loadLibrary("Example"); //got path in
vm arguments - works.
}
Public static void main(String[] args) {
Int a = 8;
System.out.println(Mirror(a));
}
使用javah创建标题,让我获得此签名:
JNIEXPORT jint JNICALL Java_HelloWorld_Hello_Mirror (JNIEnv *, jclass, jint);
写了一个cpp:
与h具有相同的签名:"return 1";
就是这样......这是我从日食中得到的错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloWorld/Hello.Mirror(I)I
at HelloWorld.Hello.main (Hello.java:14)
这些是我的想法: A.看到有关c和cpp的东西,我是在混合东西。 B. jdk还是东西? C.库完全加载(检查了其他没有获取参数的函数),可能类型不兼容?
坚持这一段时间,希望你们能帮助我!
答案 0 :(得分:0)
解决! 只需要在“extern c”命令之后在cpp文件中的两个函数周围添加“{”...