一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java通過調用C/C++實現的DLL動態庫——JNI的方法

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

2021-03-22 14:15nothingfinal Java教程

這篇文章主要介紹了Java通過調用C/C++實現的DLL動態庫——JNI的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

由于項目的需要,最近研究了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負責;代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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并實現其方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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,實現如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://yq.aliyun.com/articles/359317

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 边摸边吃奶玩乳尖视频 | 精品国产中文字幕在线视频 | 久久亚洲精品AV成人无 | 236宅宅2021最新理论 | 欧美一级高清片免费一级 | 欧乱色国产精品兔费视频 | 日本肉体xxxx | 69热精品视频在线看影院 | 王的视频vk| 亚洲欧洲日产国码 最新 | 国产精品日本一区二区不卡视频 | 2012年中文字幕在线看 | 色婷婷综合久久久 | 国产精品亚洲w码日韩中文 国产精品香蕉在线观看不卡 | 成人在线免费观看视频 | 猫咪av | 爱色综合v | 亚洲小视频网站 | 国内精品久久久久久久久久久久 | 成人精品视频 成人影院 | 日产乱码卡1卡2卡三免费 | 欧美日韩国产亚洲一区二区三区 | 亚洲欧美国产精品久久久 | 天堂漫画破解版 | 日韩视频免费一区二区三区 | 动漫美女胸被狂揉扒开吃奶动态图 | 明星ai人脸替换脸忘忧草 | 青草影院在线观看 | 日韩一区二区三区四区区区 | 欧美免赞性视频 | 亚洲2卡三卡4卡5卡精品 | ts人妖另类国产 | 三级午夜宅宅伦不卡在线 | 无限资源在线观看8 | 瘦老汉gay| 欧美高清日韩 | 99精品国产高清自在线看超 | 精品在线91 | 亚洲国产成人久久综合一区77 | 高清一区 | 四虎永久在线精品波多野结衣 |