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,里面有一个运算方法
这个方法是用来判断最小值的。因为java是不能直接调用这个方法,所以需要有个中间库来衔接java和mathOper.dll
第一步:定义这个中间库的名称为callMathOper,打开eclipse,新建一工程TestDll,定义类TestDll(名称任意),代码如下:
第三步:打开visual studio,新建一项目callMathOper(这个就是中间库的名称),新建头文件TestDll.h,将第二步中生成的TestDll.h的内容copy到这个头文件里
第四步:选中该项目,右键"属性",修改配置
1.修改配置类型
![](http://img.my.csdn.net/uploads/201301/10/1357808915_2059.jpg)
2.加入jdk下的include目录,主要作用是引入jni.h这个头文件
![](http://img.my.csdn.net/uploads/201301/10/1357808949_7703.jpg)
第五步:在项目的源文件中新增一cpp文件callMathOper.cpp,加入如下代码:
开发环境:eclipse, visual studio 2010
举例说明:
如有一个动态库mathOper.dll,里面有一个运算方法
int Min(int a, int b);
这个方法是用来判断最小值的。因为java是不能直接调用这个方法,所以需要有个中间库来衔接java和mathOper.dll
第一步:定义这个中间库的名称为callMathOper,打开eclipse,新建一工程TestDll,定义类TestDll(名称任意),代码如下:
public class TestDll {第二步:打开cmd窗口,进入TestDll.class目录下,执行javah TestDll,在当前目录生成TestDll.h
static {
System.loadLibrary("callMathOper");// 载入dll
}
public native staticint Min(int a, int b);// 函数声明
}
第三步:打开visual studio,新建一项目callMathOper(这个就是中间库的名称),新建头文件TestDll.h,将第二步中生成的TestDll.h的内容copy到这个头文件里
第四步:选中该项目,右键"属性",修改配置
1.修改配置类型
![](http://img.my.csdn.net/uploads/201301/10/1357808915_2059.jpg)
2.加入jdk下的include目录,主要作用是引入jni.h这个头文件
![](http://img.my.csdn.net/uploads/201301/10/1357808949_7703.jpg)
第五步:在项目的源文件中新增一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)); }看能否正常运行及输出结果是否正确。
相关文章推荐
- Windows下Java如何调用本地获取mac地址
- JAVA如何调用WINDOWS命令行
- Windows下Java如何调用本地获取mac地址
- 如何在JAVA程序中调用windows其他程序
- 使用Java调用DLL动态链接库(如何在Java中调用DLL方法)
- JAVA如何调用WINDOWS命令行
- JAVA如何调用WINDOWS命令行
- Java如何调用外部exe程序
- 如何注册java 程序为windows 服务
- 在Windows Mobile和Wince(Windows Embedded CE)下进行Native C++开发,如何取出当前执行文件的路径和调用模块的路径
- cocos2d-js 安卓环境,如何用js代码直接调用java函数
- 如何跨线程调用Windows窗体控件
- JAVA调用动态链接库DLL之JNative学习
- 如何在js调用java方法并取回返回值
- Gsoap调用java实现的webservice时,如何传递复杂数据类型?
- 如何使windows下的bat文件调用linux下的shell脚本的方法
- JAVA调用动态链接库(dll)
- Java调用C++动态链接库---JNAerator命令行生成Bridj的包
- c++和java中关于如何调用父类方法和子类方法的辨析
- 在WebView中如何让JS与Java安全地互相调用