JAVA使用JNI调用C/C++动态库
来源:互联网 发布:mac 多因素方差分析 编辑:程序博客网 时间:2024/05/18 01:07
转自:http://blog.sina.com.cn/s/blog_4087649401012due.html
在实际使用中,我们经常会在JAVA和C/C++之间进行交互,比较通用的方法目前是使用JNI接口进行。
Native方法:
Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
可以将native方法比作Java程序同C程序的接口,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
JAVA本地方法适用的情况
1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA
2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的
3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
=====================================================
一.
JNI是Java
二.
这里以Helloworld.java调用HelloWorld.dll/HelloWorld.so为例,讲述JNI的使用方法。
1.
2.
3.
4.
5.
6.
下图是JNI的使用方法进行图例化解释:
三.
根据“二.JNI的使用方法”中介绍的步骤,我们做几个实例。
1.
1)
public
}
2)
3)
#include
#ifndef
#define
#ifdef
extern
#endif
JNIEXPORT
JNIEXPORT
#ifdef
}
#endif
#endif
需要注意的是Java中的类型发生了变化,另外native方法前面增加了前缀。
4)
//
//
#include
#include
char
JNIEXPORT
(JNIEnv
}
JNIEXPORT
(JNIEnv
}
5)
6)
2.
通常我们使用的source都是在某个Package中,这种情况下的处理稍有不同。还是以上面的示例为例,简单说明一下。
1)
package
public
}
2)
3)
#include
#ifndef
#define
#ifdef
extern
#endif
JNIEXPORT
JNIEXPORT
#ifdef
}
#endif
#endif
4)
5)
6)
四.
至此,JNI的基本使用方法介绍完了,但在实际使用中可能还会存在各种各样的问题,如其他操作系统(如:Linux)下的使用方法,传递中文字符的问题,传递复杂类型的问题等等,这需要大家不断深入探讨和钻研,方可熟练运用。
- JAVA使用JNI调用C/C++动态库
- JAVA使用JNI调用C/C++动态库
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- Java调用C/C++编写的动态连接库-JNI
- linux下 java JNI调用C语言动态链接库
- java 调用C/C++ JNI 动态链接库
- java(JNI)调用c/c++动态链接库 linux
- java借助于JNI调用c/c++动态链接库
- linux下 java JNI调用C语言动态链接库(非常使用!!非常经典!!)
- Java使用JNI调用C/C++的DLL动态链接库1
- Java使用JNI调用C/C++的DLL动态链接库2
- Java调用C JNI
- jni c调用java
- JNI java c 调用
- JNI C调用Java
- 使用JNI,让java调用c代码
- 我的第十六个C++上机报告(求一元二次方程的根)
- SQLite的多线程应用与iOS开发
- Java EE项目中的异常处理 (实在写的太好了,导致我非法转载!!!)
- 半边天最新推荐伤感日志发布:寂寞,在指尖滴落
- ASP.NET 页面添加用户控件
- JAVA使用JNI调用C/C++动态库
- 不容错过的精选免费jQuery UI主题大荟萃
- UBI - 标记坏块
- 启动Oracle11R2数据库,提示ORA-03113: 通信通道的文件结尾的解决方案
- 解决rpm包安装时的循环依赖问题
- 多播委托
- 矩阵走法
- 心得体会
- MSP430与GPRS模块的串口通信硬件流控制