Java调用动态库所需要关心的问题:
- 如何装载dll文件,以及如何定位所要使用的方法;
- 数据类型是如何对应的;
- 如何给使用的方法传递参数;
- 如何获取返回的值。
1) 编写java程序:这里以HelloWorld为例。
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello"); //要调用的dll库
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
2) 编译 javac HelloWorld.java 生成HelloWorld.class文件。
3) 生成扩展名为h的头文件 javah HelloWorld 生成HelloWorld.h的头文件
4) 编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法。
#include "jni.h"
#include "HelloWorld.h"
#include other headers
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj){
printf("Hello world!\n");
return;
}
5) 生成动态库hello.dll
6) 运行程序 java HelloWorld