1、 JNI调用C/C++程序(dll方式)
a) 详细步骤
i. 新建一个java project,命名为JNITest
ii. new一个package com.jthink
iii. 在这个包中新建一个class,命名为Demo,修改Demo.java如下:
package com.jthink;
public class Demo {
static {
//System.loadLibrary("Demo");
//System.loadLibrary("jniDll");
}
public native void sayHello();
public static void main(String[] args) {
//System.out.println(System.getProperty("java.library.path"));
new Demo().sayHello();
}
}
iv. 编译所编写的java类
1. 直接用eclipse编译(右击项目,run as -> java application)
2. 打开工作空间中的项目JNITest,进入bin\com\jthink查看是否生成了Demo.class,如果有则表明编译成功
v. 生成C/C++头文件
1. 打开一个cmd,首先进入工作空间,依次打指令cd bin javah com.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"
JNIEXPORT void JNICALL Java_com_jthink_Demo_sayHello(JNIEnv *env, jobject obj) {
printf("hello world\n");
}
5. 拷贝java安装文件(C:\Program Files\Java\jdk1.6.0_21\include)include下面的jni.h和include/win32(C:\Program Files\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动态链接库
package com.jthink;
public class Demo {
static {
System.loadLibrary("Demo");
//System.loadLibrary("jniDll");
}
public native void sayHello();
public static void main(String[] args) {
//System.out.println(System.getProperty("java.library.path"));
new Demo().sayHello();
}
}
ix. 运行结果: