这几天研究了下 JAVA调用C ,在不懂C的情况下研究这个实在让人郁闷,还好总算搞出来了。
JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。
下面来说说如何实现 JAVA调用C
首先来说JAVA部分
JAVA 部分
1、 加载动态库(dll文件 )
static {
System.loadLibrary(“dll库文件”);
}
2、 调用的方法做本地声明,关键字为native 方法不用实现 由C实现
public native void displayHelloWorld();
3、 执行javac HelloWorld.java (以下java类的命名都以HelloWorld命名)
4、 执行javah –classpath . HelloWorld 生成 “.h”文件. 把这个“.h”文件交给C实现。
C方面操作
用vc++做为编译器具体操作如下:
1、 创建项目—>win32 项目—>应用类型选择dll
2、 C类库不包括与java通信的库类,将JNI加载到C库类中 也就是 把JAVA jdk 包include文件夹的所有文件C 编译器 VC\include 下
3、 实现HelloWorld.h接口 生成 dll文件(生成的dll文件用replase下的 否则会产生java.lang.UnsatisfiedLinkError 或者乱码情况 )。
4、 把生成的dll文件拷贝到和class文件一个目录下 运用 java
注:提供可运行jnirun.bat 方便查看结果