国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java通過調用C/C++實現的DLL動態庫——JNI的方法

2024-07-13 10:16:44
字體:
來源:轉載
供稿:網友

由于項目的需要,最近研究了java 調用DLL的方法,將如何調用的寫于此,便于日后查閱:

采用的方法是JNI: Java Native Interface,簡稱JNI,是Java平臺的一部分,可用于讓Java和其他語言編寫的代碼進行交互。

下面是從網上摘取的JNI工作示意圖:

java,dll,動態庫

總體說明:先在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頭文件,內容如下:

java,dll,動態庫

java,dll,動態庫

注意: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){int var = 0;var = DLL_API_SUB(a,b);return var;}JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1MUL(JNIEnv *env, jobject obj, jint a, jint b){int var = 0;var = DLL_API_MUL(a,b);return var;}JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1DIV(JNIEnv *env, jobject obj, jint a, jint b){int var = 0;var = DLL_API_DIV(a,b);return var;} //此文件完

加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所在的目錄,如下:

java,dll,動態庫

4、編譯動態庫工程:生成javaCallcpp.dll,并將這個動態庫復制到java工程目錄下:

java,dll,動態庫

5、使用DLL:運行java程序,結果如下:

java,dll,動態庫

至此,java調用dll已經完成。

總結

以上所述是小編給大家介紹的Java通過調用C/C++實現的DLL動態庫——JNI的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彩票| 溧阳市| 万盛区| 称多县| 永昌县| 札达县| 宁城县| 宜良县| 满城县| 蛟河市| 大渡口区| 隆昌县| 贵州省| 枝江市| 孙吴县| 桃江县| 九江市| 长乐市| 黄冈市| 乌拉特后旗| 莱州市| 长沙县| 轮台县| 连州市| 七台河市| 洪江市| 山丹县| 保德县| 永吉县| 洛扎县| 日喀则市| 监利县| 米泉市| 宁德市| 桐城市| 宽甸| 循化| 凤冈县| 蕉岭县| 嵩明县| 新密市|