国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 元江| 平阳县| 曲靖市| 高台县| 门源| 鹤岗市| 鄂温| 阳原县| SHOW| 永济市| 本溪市| 恩平市| 谢通门县| 新竹市| 资中县| 安庆市| 白河县| 清远市| 彭泽县| 白银市| 博白县| 肃北| 秦安县| 沁源县| 阳江市| 固镇县| 绥芬河市| 交口县| 资中县| 新干县| 台湾省| 衡南县| 九江市| 敦化市| 宁城县| 南平市| 舞钢市| 长寿区| 哈尔滨市| 图片| 平潭县|