中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-06 14:55:17 來源:腳本之家 閱讀:157 作者:nothingfinal 欄目:編程語言

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

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

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

Java通過調用C/C++實現的DLL動態庫——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頭文件,內容如下:

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

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

注意: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通過調用C/C++實現的DLL動態庫——JNI的方法 

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

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

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

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

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

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

育儿| 沙田区| 芒康县| 高陵县| 门源| 阿鲁科尔沁旗| 南丹县| 封丘县| 青浦区| 泰兴市| 思茅市| 石台县| 科技| 图们市| 任丘市| 江北区| 广德县| 夏河县| 遵化市| 枣庄市| 天水市| 密山市| 潜山县| 微山县| 鱼台县| 高唐县| 滕州市| 封丘县| 营口市| 奉化市| 黎城县| 奈曼旗| 尼木县| 金川县| 长垣县| 绥中县| 达尔| 阳东县| 萍乡市| 鄯善县| 苍南县|