1、首先用java编写一个简单类
public class Hello { public native void sayHello(); static { System.loadLibrary("HelloDll"); } public static void main (String[] args) { new Hello().sayHello(); } }
使用javac Hello.java编译该类
再用javah Hello生成Hello.h头文件
2、在Visual C++ 6.0中新建一个动态链接库工程,工程名为HelloDll
3、在该工程中新建一个头文件名为:hello.h,将刚才生成的Hello.h文件中的代码复制进去,如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class Hello */ #ifndef _Included_Hello #define _Included_Hello #ifdef __cplusplus extern "C" { #endif /* * Class: Hello * Method: sayHello * Signature: ()V */ JNIEXPORT void JNICALL Java_Hello_sayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
不需要做任何修改
此时新建一个Test.cpp文件具体实现刚才的头文件中的函数,代码如下
#include "Hello.h" #include <jni.h> JNIEXPORT void JNICALL Java_Hello_sayHello (JNIEnv *, jobject){ printf("Hello world,I'm coming!"); return; }
此时若编译则会报错,说找不到jni.h文件,如下:
fatal error C1083: Cannot open include file: 'jni.h': No such file or directory
此时只需操作步骤4即可
4、在jdk的安装目录~\jdk1.6.0_25\include下将jni.h和~\jdk1.6.0_25\include\win32下的jni_md.h文件复制到Visual C++ 6.0的D:\Microsoft Visual Studio\VC98\Include目录下
5、此时在编译链接Test.cpp文件,即可生成动态链接库文件:
再将该文件复制到与Hello.class文件同一个目录下,运行java文件,即可调用有C/C++编写实现的接口,即动态链接库文件
运行结果如下:
此即调用成功。