亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

尤溪县| 建德市| 通山县| 夏邑县| 北安市| 达日县| 肥西县| 墨竹工卡县| 德化县| 成武县| 旺苍县| 探索| 东乌珠穆沁旗| 江源县| 临江市| 龙岩市| 京山县| 竹山县| 新泰市| 新野县| 南靖县| 临泉县| 平潭县| 林甸县| 葵青区| 墨玉县| 许昌市| 龙江县| 布拖县| 射阳县| 新昌县| 白银市| 崇信县| 宁德市| 丹凤县| 濉溪县| 略阳县| 富裕县| 绍兴县| 武汉市| 昆明市|