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

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

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精品一区 | 国产成人综合一区精品 | 99久久精品6在线播放 | 爆操俄罗斯美女 | 亚洲天堂影院 | 亚洲乱亚洲乱妇41p 亚洲乱码一区二区三区国产精品 | 成人资源影音先锋久久资源网 | 性做久久久久免费观看 | 韩国一级淫片特黄特刺激 | 女人叉开腿让男人捅 | 欧亚专线欧洲m码可遇不可求 | 国语视频高清在线观看 | 美女张开腿黄网站免费精品动漫 | 国内精品一区二区在线观看 | 色天天色综合 | 99r视频| 2020年国产精品午夜福利在线观看 | 亚洲老头老太hd | 欧美yyy| 日本暖暖在线 | 精品国产免费久久久久久婷婷 | 青草免费在线 | 国产馆在线观看免费的 | 欧美一区二区三区四区在线观看 | 香蕉国产精品偷在线播放 | 色人阁导航| chinese野外gay军人 | 日韩一本在线 | 99精品视频在线观看re | 免费一级夫妻a | 日韩高清成人毛片不卡 | 成人影院在线观看视频 | 久青草国产在视频在线观看 | 成人久久18网站 | 亚洲a视频在线 |