由于項目的需要,最近研究了java 調用DLL的方法,将如何調用的寫于此,便于日後查閱:
采用的方法是JNI:Java Native Interface,簡稱JNI,是Java平台的一部分,可用于讓Java和其他語言編寫的代碼進行互動。
下面是從網上摘取的JNI工作示意圖:

總體說明:先在JAVA中建立一個類,通過javac生成.class,再由javah生成.h;然後将.h複制到VC下,由VC實作具體函,
并編譯通過後生成DLL,将DLL放入JAVA工程中使用,完畢。
下面說說具體步驟(含執行個體):
1、建java類:裝載DLL,聲明要使用DLL方法,具體實作由DLL負責;代碼如下:
public class Java2cpp
{
static
{
System.loadLibrary("javaCallcpp");
}
public native int DLL_ADD(int a,int b); //加
public native int DLL_SUB(int a,int b); //減
public native int DLL_MUL(int a,int b); //乘
public native int DLL_DIV(int a,int b); //除
public static void main(String args[])
{
int sum = 0;
Java2cpp test = new Java2cpp();
sum = test.DLL_ADD(2, 4);
System.out.println("Java call cpp dll result:" + sum);
}
}
2、生成.h檔案:cmd 到Java2cpp.java目錄下,做如下操作:
第一步:javac Java2cpp.java 生成java2cpp.class
第二步:javah Java2cpp 生成Java2cpp.h頭檔案,内容如下:
注意:Java2cpp.h這個頭檔案的内容是不能修改的,否則會出錯。
3、制做VC動态庫:建立一個C/C++動态庫工程,命名為javaCallcpp,導入java2cpp.h并實作其方法:
#include "Java2cpp.h"
#include "dllApi.h"
JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1ADD(JNIEnv *env, jobject obj, jint a, jint b)
{
int var = 0;
var = DLL_API_ADD(a,b);
return var;
JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1SUB(JNIEnv *env, jobject obj, jint a, jint b)
var = DLL_API_SUB(a,b);
JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1MUL(JNIEnv *env, jobject obj, jint a, jint b)
var = DLL_API_MUL(a,b);
JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1DIV(JNIEnv *env, jobject obj, jint a, jint b)
var = DLL_API_DIV(a,b);
} //此檔案完
加DLL_API_ADD()、減DLL_API_SUB()、乘DLL_API_MUL()、除DLL_API_DIV()四個函數在别一個
檔案中實作,檔案名是dllApi.cpp,實作如下:
int DLL_API_ADD(int a,int b)
return (a+b);
int DLL_API_SUB(int a,int b)
return (a-b);
int DLL_API_MUL(int a,int b)
return (a*b);
int DLL_API_DIV(int a,int b)
return (a/b);
此時工程還編譯不過,因為include<jni.h>出錯,需添加JNI所在的目錄,如下:
4、編譯動态庫工程:生成javaCallcpp.dll,并将這個動态庫複制到java工程目錄下:
5、使用DLL:運作java程式,結果如下:
至此,java調用dll已經完成。