1、编写一个java类文件
public class Test{ public native void say(); }
用native关键字修饰将被其它语言实现的方法
2、用javah命令生成.h文件
a、把Test.java文件编译成class文件
d、javah Test
你会发现当前目录下多了一个Test.h文件
3、生成dll文件,在此以Dev c++ v5.0汉化版为例
a、新建一个c++语言的dll工程,名叫Testdll
b、把里面自动生成的两个文件移除
c、右击工程名,添加,选择Test.h确定
d、新建一个单元,假如名称为Testdll.cpp,把Test.h声明的方法实现
#include <stdio.h> #include "com_xinfeng_intf_Animal.h" JNIEXPORT void JNICALL Java_Test_say (JNIEnv *, jobject) { printf("Hello World!\n"); }
e、点击“运行”->“编译”,这时你会看到很多数据类型没被声明的错误,那是因为
com_xinfeng_intf_Animal.h使用了很多JAVA_HOME/include/jni.h文件自定义的数据类型,而jni.h又引
用了JAVA_HOME/include/win32/jni_md.h,这时你需要把jni.h和jni_md.h引入到工程里面来,左击工程名
“工程属性”->“文件/目录”->“包含文件目录”把JAVA_HOME/include和
JAVA_HOME/include/win32文件夹添加,确定后,再次编译一切正常,这时在工程
的目录下就找到testdll.dll文件,这样dll文件就生成了
4、调用dll文件
a、把testdll.dll文件复制在项目底下 (或JAVA_HOME/bin)
b、修改java文
public class Test{ static{ /* * 转入dll文件,在此不需要后缀名 * 不同的系统库文件的后缀名是不一样的 * 如windows是dll,而linux是so * jvm在不同系统会载入相应的库文件 */ System.loadLibrary("Testdll"); // } public static void main(String[] args) { Test test = new Test(); test .say(); } public native void say(); }
5、运行结果
Hello World!