JAVA调用Dll,这里用JNI(JAVA NATIVE INTERFACE)实现,关于JNI不多解释,此例子用文本编辑器写。
我们在D盘下创建一个文件夹jcode,代码就写在里面。
JNI技术在JAVA架构中的位置如下图示:
1、实现步骤
1)创建一个java类2)用javac编译成class
3)用javah编译class生成.h文件
4)使用.h文件创建dll
5)执行.clss
6)完成
1.1创建一个java类
public class DllTest{
static {
System.loadLibrary("myString");
}
public native void helloWorld();
public static void main(String[] s){
DllTest test = new DllTest();
test.helloWorld();
}
}
1.2用javac编译成class
将DllTest.java编译成class:
打开cmd,进入D:/jcode,执行javac DllTest.java,如下:
可以看到D:/jcode下生成了DllTest.class文件。
1.3用javah编译class生成.h文件
命令如下:
可以看到D:/jcode下生成了DllTest.h文件。
1.4使用.h文件创建dll
这里使用Dev C++开发工具创建Dll文件。打开Dev C++,打开File——>New——>Project,如下:
将dll工程保存在d:/jcode下,工程创建初期,有两个文件:dllmain.c和dll.h,dllmain.c是C源程序,dll.h是头文件。下面我们修改者两个文件。
将dll.h里面的内容全部删除,将DllTest.h的内容拷贝进来,此时dll.h的内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class DllTest */
#ifndef _Included_DllTest
#define _Included_DllTest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: DllTest
* Method: helloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_DllTest_helloWorld(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
把JNIEXPORT void JNICALL Java_DllTest_helloWorld(JNIEnv *, jobject);的参数去掉
为:JNIEXPORT void JNICALL Java_DllTest_helloWorld();
,此例子不用参数。
将函数原型JNIEXPORT void JNICALL Java_DllTest_helloWorld();拷贝到dllmain.c中,实现如下:
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include
#include
JNIEXPORT void JNICALL Java_DllTest_helloWorld(){
printf("Hello World ! \n");
}
1.5执行.clss
整个例子演示完。
如果还看不明白,下载
2.关于JAVA调用C\C++的文章
IBM :https://www.ibm.com/developerworks/cn/java/jnimthds/