您的位置:首页 > 编程语言 > Java开发

java如何调用windows动态链接库

2013-01-10 16:59 232 查看
在java项目开发的时候,可能会涉及调用第三方的接口,而第三方的接口提供方式不一定是以java类的方式提供,如果是C或C++开发的第三方系统,则一般以动态链接库的方式提供,现在就讲一下java是如何调用动态链接库的。比较流行的方法有jni和jawin, 后者是开源组织提供的封装库,相对调用简单,不需要懂得C或C++的编程方式。这里主要描述jni的调用方式,需要对C或C++有一定了解。

开发环境:eclipse, visual studio 2010

举例说明:

如有一个动态库mathOper.dll,里面有一个运算方法

int Min(int a, int b);

这个方法是用来判断最小值的。因为java是不能直接调用这个方法,所以需要有个中间库来衔接java和mathOper.dll

第一步:定义这个中间库的名称为callMathOper,打开eclipse,新建一工程TestDll,定义类TestDll(名称任意),代码如下:

public class TestDll {
static {
System.loadLibrary("callMathOper");// 载入dll
}

public native staticint Min(int a, int b);// 函数声明

}
第二步:打开cmd窗口,进入TestDll.class目录下,执行javah TestDll,在当前目录生成TestDll.h

第三步:打开visual studio,新建一项目callMathOper(这个就是中间库的名称),新建头文件TestDll.h,将第二步中生成的TestDll.h的内容copy到这个头文件里

第四步:选中该项目,右键"属性",修改配置

1.修改配置类型



2.加入jdk下的include目录,主要作用是引入jni.h这个头文件



第五步:在项目的源文件中新增一cpp文件callMathOper.cpp,加入如下代码:

#pragma comment(lib,"mathOper.dll.lib")

extern "C"_declspec(dllimport) int Min(int a,int b);

#include <stdio.h>
#include "TestDll.h"

JNIEXPORT jint JNICALL Java_TestDll_Min(JNIEnv *, jclass _cls, jint a, jint b){
int result = Min(a,b);
return result;
}
第六步:右键“生成”,产生callMathOper.dll,将callMathOper.dll和mathOper.dll拷到java工程TestDll根目录下,在TestDll类中加入main方法,进行测试:

public static void main(String[] args) {
TestDll td = new TestDll();
System.out.println(td.Min(123, 125));
}
看能否正常运行及输出结果是否正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: