JAVA通過JNI調(diào)用本地dll
一、JAVA中所需要做的工作
Java工程Example01
第一步:創(chuàng)建Java類,類名:TestJni 在里面定義一個(gè)本地方法(用native關(guān)鍵字修飾的方法)
package NeoWay;
public class TestJni
{
static {
System.loadLibrary("neoway");
}
public native static void sayHello();
}
第二步:生成javah 說需要的.class文件
在DOS窗口中進(jìn)入工程所在的src文件夾:
javac NeoWay\TestJni.java
第三步:使用javah命令生成本地方法的C++頭文件
@rem javah 包.類
javah NeoWay.TestJni
在DOS窗口中進(jìn)入工程所在目錄,然后執(zhí)行javah NeoWay.TestJni命令,執(zhí)行完之后就會(huì)在當(dāng)前目錄生成一個(gè)后綴名為.h的頭文件
第四步:新建VC++的dll工程(附件選項(xiàng):空項(xiàng)目),工程名為:neoway
將相關(guān)的路徑加入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內(nèi)容如下:
/* 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
新建一個(gè) NeoWay_TestJni.cpp,內(nèi)容如下:
#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();
}
}
第五步:測試運(yùn)行
將VC++工程生成neoway.dll拷貝至Java工程Example01目錄
javac Example01.java
java Example01
輸出:
main() entry()
Java_NeoWay_TestJni_sayHello() Entry