本节通过一个简单的实例来说明Java程序中如何调用dll。
1.创建HelloWorld.java;
2.编译HelloWorld.java文件,产生HelloWorld.class文件;
class HelloWorld {
public native static void sayHelloWorld();
}
3
.在命令行下执行
javah HelloWorld
,产生
HelloWorld.h
文件;
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: sayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_sayHelloWorld
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
4.在Visual C++6.0 中建立Win32 Dynamic-Link Library工程,并编写HelloWorld.cpp文件,包含上一步中生成的HelloWorld.h头文件,编译执行,生成HelloWorld.dll文件,并将dll文件移至HelloWorld目录下;
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_sayHelloWorld (JNIEnv * jni_env, jclass jc)
{
printf("HelloWorld!\n");
}
5.打开HelloWorld.java文件,修改如下
class HelloWorld {
public native static void sayHelloWorld();
static {
System.loadLibrary("HelloWorld");
}
public static void main(String[] args) {
HelloWorld.sayHelloWorld();
}
重新编译执行,得到输出结果。
注意:
如果在jdk1.6环境下的Eclipse 3.2.1运行会报错误,但该错误是由于Eclipse与jdk1.6冲突造成的,并不是Java本身的问题,所以该程序最好在命令行下执行。