這個(gè)小例子用JNI調(diào)用了VC++做的DLL動(dòng)態(tài)庫(kù)。
1、總體說(shuō)明:
實(shí)現(xiàn)一個(gè)函數(shù),傳入整形數(shù)i,返回值i*i,這個(gè)函數(shù)做在DLL中,java將通過(guò)JNI調(diào)用這個(gè)函數(shù),傳入一個(gè)參數(shù),得到返回值。
確定DLL的名稱(chēng)為calldll.dll,函數(shù)shanfei(int i)。
2、編寫(xiě)java程序javacall.java,如下:
public class javacall
{
static
{
System.loadLibrary("calldll"
;
}
public native static int shanfei(int i);
public static void main(String[] args)
{
javacall jc = new javacall();
int j;
j = jc.shanfei(4);
System.out.println(j);
}
}
3、編譯
javac javacall.java
4、生成頭文件
javah javacall
生成javacall.h文件
5、制作VC++動(dòng)態(tài)庫(kù)
建立新DLL工程,程序中添加:
#include "javacall.h"
JNIEXPORT jint JNICALL Java_javacall_shanfei (JNIEnv *, jclass, jint p)
{
int j = p*p;
return j;
}
別忘了將javacall.h復(fù)制到VC工程目錄中,然后編譯,如果編譯說(shuō)找不到j(luò)ni.h文件,可以將jni.h復(fù)制到工程目錄中,還可將javacall.h文件中的#include <jni.h>改為#include "jni.h",再編譯。
6、java調(diào)用
將生成的calldll.dll文件復(fù)制到j(luò)avacall.java所在的目錄中,運(yùn)行
java javacall,應(yīng)該可以看到運(yùn)行結(jié)果。