JNI调用CPP程序
创建JNITest类,并包含一个未定义的native方法shit()
cmd窗口中cd 到项目的src目录下(此处可能根据jdk等版本有差异?),并执行javah -jni practice.JNITest(类的全限定类名 ) :
执行成功后在项目的bin目录下会生成相应的JNI头文件:
该头文件中引入了一个JNI头文件,之后会说,同时该头文件定义了JNITest类中需要在cpp中被实现的native方法,注意需要在此处同时include一个jni_md.h的头文件,否则JNIEXPORT会报错,同样一会会说:
在VS中创建DLL动态链接库项目,并引入practice_JNITest.h该文件。删除原来的DLL中的方法,并实现在头文件中所定义的需要实现的native方法:
此时在practice_JNITest.h中所引入的两个头文件会报错因为没有找到,到JDK根目录的include目录下找到jni.h:
并在include/win32中找到jni_md.h:
将这两个文件放在CPP项目的根目录下,并在VS中右键项目,选择属性,C/C++:常规,并在附加包含目录中设置相应的头文件地址:
在引入了practice_JNITest.h的cpp文件中开始重写相应的native方法:编译之前确定编译的为32位还是64位dll(根据jdk来),确定后开始编译,编译完毕后如果是64位会在cpp项目根目录下生成x64文件夹,并在其中的debug目录中可以获取dll文件,若是32位则再项目根目录中的debug目录下就可以找到。找到后将相应的dll文件复制到Java项目的根目录下:
再Java程序中加载动态链接库,并调用native方法,查看结果: