使用Java调用dll动态链接库

  • Post author:
  • Post category:java



一:什么是dll?

DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

写成dll文件大多是用C、VB、Delphi语言编写的,具体如何写就不考虑了,有现成的就行了。


二:Java语言该如何调用dll?

采用JNative技术为例:

首先将要调用的dll引入本地工程中:

1. 首先下载JNative.jar包,将jar包导入工程中;

2. 然后找到JNative.jar包中的JNativeCpp.dll(在windows环境中,Linux环境中用libJNativeCpp.so)

3. 接着将 JNativeCpp.dll 和 要引入的dll文件 放入C:\Windows\System32 目录下;以及 jdk的bin目录下(因为dll文件中会用到

.dat,

.lib文件);如果是web动态工程用到Tomcat,还需要放到Tomcat的bin目录下;

4. 还有一种方法是将他们直接放在本地工程中,加载本地文件;右击工程—Built Path—Source—Web App Libaries—Native library location:(none) — edit,选择本地放的dll文件夹就可以了。

引入完后,开始写Java代码:

在程序中加载dll文件有两种写法:

①:loadLibrary方法: 把dll文件拷贝到C:\Windows\System32目录 下, 引用时,只需要写dll文件名字即可。

System.loadLibrary("ZCDogChk"); // ZCDogChk 为dll文件名字

②: load方法: 写dll文件的完整路径

System.load("D:\\RegisterPlatform\\ZCDogChk.dll");

通过System.getProperty(“java.library.path”)查看路径位置

System.out.println(System.getProperty("java.library.path"));

// “ZCDogChk” 为dll文件名, “fChkDogRegNumZC” 为要调用的函数名

JNative jNative = new JNative("ZCDogChk", "fChkDogRegNumZC");
jNative.setRetVal(Type.STRING);  // 设置调用后的返回值类型
jNative.setParameter(0, str);  //参数下标是从0开始
jNative.getFunctionName();    //dll 函数名   
jNative.getDLLName();   //dll文件名
jNative.invoke();  //执行dll方法
jNative.getRetVal(); //获取返回结果



版权声明:本文为u013709087原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。