1、首先用java编写一个简单类
public class Hello
{
public native void sayHello();
static {
System.loadLibrary("HelloDll");
}
public static void main (String[] args) {
new Hello().sayHello();
}
}
使用javac Hello.java编译该类
再用javah Hello生成Hello.h头文件
2、在Visual C++ 6.0中新建一个动态链接库工程,工程名为HelloDll
3、在该工程中新建一个头文件名为:hello.h,将刚才生成的Hello.h文件中的代码复制进去,如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Hello */
#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Hello
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_Hello_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
不需要做任何修改
此时新建一个Test.cpp文件具体实现刚才的头文件中的函数,代码如下
#include "Hello.h"
#include <jni.h>
JNIEXPORT void JNICALL Java_Hello_sayHello
(JNIEnv *, jobject){
printf("Hello world,I'm coming!");
return;
}
此时若编译则会报错,说找不到jni.h文件,如下:
fatal error C1083: Cannot open include file: 'jni.h': No such file or directory
此时只需操作步骤4即可
4、在jdk的安装目录~\jdk1.6.0_25\include下将jni.h和~\jdk1.6.0_25\include\win32下的jni_md.h文件复制到Visual C++ 6.0的D:\Microsoft Visual Studio\VC98\Include目录下
5、此时在编译链接Test.cpp文件,即可生成动态链接库文件:
再将该文件复制到与Hello.class文件同一个目录下,运行java文件,即可调用有C/C++编写实现的接口,即动态链接库文件
运行结果如下:
此即调用成功。