Java调用dll的几种方法
来源:互联网 发布:揭秘黑马程序员骗局 编辑:程序博客网 时间:2024/05/18 01:48
Java调用dll的几种方法
Java_JNI调用C/C++代码
JNI,是Java Native Interface的简称,中文是“Java本地调用”。通过这种技术可以做到以下两点:
- Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。
- Native程序中的函数可以调用Java层的函数,也就是说在C/C++程序中可以调用Java的函数。
JNI并不是什么特别神奇的东西,当初SUN推出它的目的是为了屏蔽不同操作系统平台的差异性,通过Java语言来调用Native语言的功能模块,避免重复制作车轮,最主要是这两个目的。
主要步骤如下:
- 首先在Java类中声明一个native的方法
- 使用Javah命令生成native方法的声明的C/C++头文件
- 按照生成的C/C++头文件来编写C/C++源文件
- 将C/C++源文件编译成动态链接库(DLL)
- 将DLL文件加入到PATH环境变量下
在eclipse中创建一个Java项目
创建了一个命为:JNI的项目,新建包名为bingcao,新建类为TestJNI
接着在TestJNI类当中声明我们的本地方法:
package bingcao;/** * @author troy * 2017-08-22 下午19:28 * */public class TestJNI { // 声明本地方法 public native double nativeMethod(); public static void main(String[] args) { /*long startTime = System.currentTimeMillis(); // 获取开始时间 // // 加载动态链接库 System.load("D:/documents/visual studio 2013/Projects/nativeDLL/x64/Debug/nativeDLL.dll"); TestJNI nativeCode = new TestJNI(); double result = nativeCode.nativeMethod(); System.out.println(result); System.out.println("JNI成功调用dll!!!"); long endTime = System.currentTimeMillis(); // 获取结束时间 System.out.println("程序运行时间: " + (endTime - startTime) + "ms");*/ }}
/* ……*/ 内注释掉的代码后面很快会用到,暂时不用管。
用jdk中javah命令来为我们生成对应的头文件,在命令可以敲入javah -help:
格式为:javah 包名.文件名
成功运行后,在当前路径下生成的.h文件:
javah命令生成native头文件。编辑器打开头文件,有以下代码:
接着在Visual studio中创建一个win32控制台应用程序,取名为nativeDLL
最后在Eclipse中使用Java调用我们的Native代码:
package bingcao;/** * @author troy * 2017-08-22 下午19:28 * */public class TestJNI { // 声明本地方法 public native double nativeMethod(); public static void main(String[] args) { long startTime = System.currentTimeMillis(); // 获取开始时间 // // 加载动态链接库 System.load("D:/documents/visual studio 2013/Projects/nativeDLL/x64/Debug/nativeDLL.dll"); TestJNI nativeCode = new TestJNI(); double result = nativeCode.nativeMethod(); System.out.println(result); System.out.println("JNI成功调用dll!!!"); long endTime = System.currentTimeMillis(); // 获取结束时间 System.out.println("程序运行时间: " + (endTime - startTime) + "ms"); }}
运行,调用成功
Java_JNA调用DLL
JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架。
你只需要下载一个jar包,就可以使用JNA的强大功能方便地调用动态链接库中的C函数。
1,下载jna.jar: jna.jar的下载地址
2,在Java项目中引入jna.jar包;
3,创建一个类;
package bingcao;import com.sun.jna.*;/** * @author troy * 2017-08-22 下午19:28 * */public class TestJNA { public interface nativeDLL extends Library { ///当前路径是在项目下,而不是bin输出目录下。 nativeDLL INSTANCE = (nativeDLL) Native .loadLibrary( "D:/documents/visual studio 2013/Projects/nativeDLL/x64/Debug/nativeDLL", nativeDLL.class); public double Java_bingcao_TestJNI_nativeMethod(); } public static void main(String[] args) { // TODO Auto-generated method stub long startTime = System.currentTimeMillis(); // 获取开始时间 double result = nativeDLL.INSTANCE.Java_bingcao_TestJNI_nativeMethod(); System.out.println(result); System.out.println("JNA成功调用dll!!!"); long endTime = System.currentTimeMillis(); // 获取结束时间 System.out.println("程序运行时间: " + (endTime - startTime) + "ms"); }}
4,加载上面生成的DLL,运行结果如下:
阅读全文
0 0
- java调用dll的几种方法
- Java调用dll的几种方法
- Java调用dll的几种方法
- 几种java调用dll的方式
- JAVA高级【10.2】《Java核心技术2》本地方法-几种java调用dll的方式
- java调用dll的几种方法(JNI,Jawin,Jacob)
- java调用dll的几种方法(JNI,Jawin,Jacob)
- NI LabWindows CVI 中调用 DLL 的几种方法
- NI LabWindows CVI 中调用 DLL 的几种方法
- 调用 ATL COM DLL的几种方法
- java调用dll几种方式总结
- java 调用webservice的几种方法
- com调用的几种方法 及 C#调用C++编写的的COM DLL
- com调用的几种方法 及 C#调用C++编写的的COM DLL收藏
- com调用的几种方法 及 C#调用C++编写的的COM DLL
- vc6调用dll的几种方式
- Java调用DLL方法
- java中调用dll文件的两种方法
- 小猴子下落*
- 接到新的项目一定要把环境搭好,可以让负责人搭建,重要重要!!!!!
- sqlmap教程1
- bzoj3165 [Heoi2013]Segment
- shua
- Java调用dll的几种方法
- 手动编译、执行java文件
- HDU
- WPF中的Template模板
- Spring Boot 集成Swagger
- Hive优化---map端连接
- js promise
- NKOJ-2460 清理花瓶
- JS中令人纠结的this