1、JNI调用C/C++程序(dll方式)
a)详细步骤
i.新建一个javaproject,命名为JNITest
ii.new一个packagecom.jthink
iii.在这个包中新建一个class,命名为Demo,修改Demo.java如下:
packagecom.jthink;
publicclassDemo{
static{
//System.loadLibrary("Demo");
//System.loadLibrary("jniDll");
}
publicnativevoidsayHello();
publicstaticvoidmain(String[]args){
//System.out.println(System.getProperty("java.library.path"));
newDemo().sayHello();
}
}
iv.编译所编写的java类
1.直接用eclipse编译(右击项目,runas->javaapplication)
2.打开工作空间中的项目JNITest,进入bin\com\jthink查看是否生成了Demo.class,如果有则表明编译成功
v.生成C/C++头文件
1.打开一个cmd,首先进入工作空间,依次打指令cdbinjavahcom.jthink.Demo
2.进入bin目录发现生成com_jthink_Demo.h说明生成成功
vi.生成dll库
1.使用VS2008创建一个项目
项目类型选择Win32,模板选择Win32项目,输入名称Demo和位置,单击确定
2.点击下一步
3.选择dll,附加选项中勾选“空项目”,然后点击完成
4.创建c文件testjni.c
#include<stdio.h>
#include"com_jthink_Demo.h"
JNIEXPORTvoidJNICALLJava_com_jthink_Demo_sayHello(JNIEnv*env,jobjectobj){
printf("helloworld\n");
}
5.拷贝java安装文件(C:\ProgramFiles\Java\jdk1.6.0_21\include)include下面的jni.h和include/win32(C:\ProgramFiles\Java\jdk1.6.0_21\include\win32)下面的jni_md.h以及刚刚生成的头文件com_jthink_Demo.h到项目中去,路径为:workspace\Demo\Demo这个文件夹下面,跟有个文件后缀为.user的同级
6.编译这个项目得到dll,右击解决方案->重现生成解决方案,在G:\qjc\C++\Demo\Debug生成dll文件
vii.拷贝刚刚那个dll到项目中,和src文件夹同级(或者放到system32中供调用,还有种办法是放到某个文件夹中,将这个路径加入到环境变量中)
viii.Java调用dll动态链接库
packagecom.jthink;
publicclassDemo{
static{
System.loadLibrary("Demo");
//System.loadLibrary("jniDll");
}
publicnativevoidsayHello();
publicstaticvoidmain(String[]args){
//System.out.println(System.getProperty("java.library.path"));
newDemo().sayHello();
}
}
ix.运行结果: