JAVA通过JNI调用本地dll
一、JAVA中所需要做的工作
Java工程Example01
第一步:创建Java类,类名:TestJni 在里面定义一个本地方法(用native关键字修饰的方法)
package NeoWay;
public class TestJni
{
static {
System.loadLibrary("neoway");
}
public native static void sayHello();
}
第二步:生成javah 说需要的.class文件
在DOS窗口中进入工程所在的src文件夹:
javac NeoWay\TestJni.java
第三步:使用javah命令生成本地方法的C++头文件
@rem javah 包.类
javah NeoWay.TestJni
在DOS窗口中进入工程所在目录,然后执行javah NeoWay.TestJni命令,执行完之后就会在当前目录生成一个后缀名为.h的头文件
第四步:新建VC++的dll工程(附件选项:空项目),工程名为:neoway
将相关的路径加入VC++的include
C:\Program Files\Java\jdk1.7.0_80\include
C:\Program Files\Java\jdk1.7.0_80\include\Win32
将生成的NeoWay_TestJni.h引入该VC工程
NeoWay_TestJni.h内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NeoWay_TestJni */
#ifndef _Included_NeoWay_TestJni
#define _Included_NeoWay_TestJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NeoWay_TestJni
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_NeoWay_TestJni_sayHello
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
新建一个 NeoWay_TestJni.cpp,内容如下:
#include "NeoWay_TestJni.h"
JNIEXPORT void JNICALL Java_NeoWay_TestJni_sayHello (JNIEnv *, jclass)
{
printf("Java_NeoWay_TestJni_sayHello() Entry\r\n");
}
//Example01
import NeoWay.TestJni;
public class Example01
{
public static void main(String[] args)
{
System.out.println("main() entry()");
TestJni.sayHello();
}
}
第五步:测试运行
将VC++工程生成neoway.dll拷贝至Java工程Example01目录
javac Example01.java
java Example01
输出:
main() entry()
Java_NeoWay_TestJni_sayHello() Entry