JNI调用CPP程序

创建JNITest类,并包含一个未定义的native方法shit()JNI调用CPP程序

cmd窗口中cd 到项目的src目录下(此处可能根据jdk等版本有差异?),并执行javah -jni practice.JNITest(类的全限定类名 ) :
JNI调用CPP程序
执行成功后在项目的bin目录下会生成相应的JNI头文件:
JNI调用CPP程序
该头文件中引入了一个JNI头文件,之后会说,同时该头文件定义了JNITest类中需要在cpp中被实现的native方法,注意需要在此处同时include一个jni_md.h的头文件,否则JNIEXPORT会报错,同样一会会说:

JNI调用CPP程序
JNI调用CPP程序

在VS中创建DLL动态链接库项目,并引入practice_JNITest.h该文件。删除原来的DLL中的方法,并实现在头文件中所定义的需要实现的native方法:

JNI调用CPP程序
此时在practice_JNITest.h中所引入的两个头文件会报错因为没有找到,到JDK根目录的include目录下找到jni.h:
JNI调用CPP程序
并在include/win32中找到jni_md.h:
JNI调用CPP程序

将这两个文件放在CPP项目的根目录下,并在VS中右键项目,选择属性,C/C++:常规,并在附加包含目录中设置相应的头文件地址:
JNI调用CPP程序

在引入了practice_JNITest.h的cpp文件中开始重写相应的native方法:
JNI调用CPP程序编译之前确定编译的为32位还是64位dll(根据jdk来),确定后开始编译,编译完毕后如果是64位会在cpp项目根目录下生成x64文件夹,并在其中的debug目录中可以获取dll文件,若是32位则再项目根目录中的debug目录下就可以找到。找到后将相应的dll文件复制到Java项目的根目录下:
JNI调用CPP程序

再Java程序中加载动态链接库,并调用native方法,查看结果:
JNI调用CPP程序
JNI调用CPP程序