欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java通過調(diào)用C/C++實(shí)現(xiàn)的DLL動態(tài)庫——JNI的方法

 更新時(shí)間:2018年01月15日 16:22:59   作者:nothingfinal  
這篇文章主要介紹了Java通過調(diào)用C/C++實(shí)現(xiàn)的DLL動態(tài)庫——JNI的方法,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下

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

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

下面是從網(wǎng)上摘取的JNI工作示意圖:

 

總體說明:先在JAVA中建立一個類,通過javac生成.class,再由javah生成.h;然后將.h復(fù)制到VC下,由VC實(shí)現(xiàn)具體函,

并編譯通過后生成DLL,將DLL放入JAVA工程中使用,完畢。

下面說說具體步驟(含實(shí)例):

1、建java類:裝載DLL,聲明要使用DLL方法,具體實(shí)現(xiàn)由DLL負(fù)責(zé);代碼如下:

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頭文件,內(nèi)容如下:

注意:Java2cpp.h這個頭文件的內(nèi)容是不能修改的,否則會出錯。

3、制做VC動態(tài)庫: 創(chuàng)建一個C/C++動態(tài)庫工程,命名為javaCallcpp,導(dǎo)入java2cpp.h并實(shí)現(xiàn)其方法:

#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()四個函數(shù)在別一個

文件中實(shí)現(xiàn),文件名是dllApi.cpp,實(shí)現(xiàn)如下:

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);
} //此文件完

此時(shí)工程還編譯不過,因?yàn)閕nclude<jni.h>出錯,需添加JNI所在的目錄,如下:

 

4、編譯動態(tài)庫工程:生成javaCallcpp.dll,并將這個動態(tài)庫復(fù)制到j(luò)ava工程目錄下:

 

5、使用DLL:運(yùn)行java程序,結(jié)果如下:

 

至此,java調(diào)用dll已經(jīng)完成。

總結(jié)

以上所述是小編給大家介紹的Java通過調(diào)用C/C++實(shí)現(xiàn)的DLL動態(tài)庫——JNI的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 關(guān)于Spring @Bean 相同加載順序不同結(jié)果不同的問題記錄

    關(guān)于Spring @Bean 相同加載順序不同結(jié)果不同的問題記錄

    本文主要探討了在Spring 5.1.3.RELEASE版本下,當(dāng)有兩個全注解類定義相同類型的Bean時(shí),由于加載順序不同,最終生成的Bean實(shí)例也會不同,文章通過分析ConfigurationClassPostProcessor的執(zhí)行過程,解釋了BeanDefinition的加載和覆蓋機(jī)制,感興趣的朋友一起看看吧
    2025-02-02
  • Spring?Security全新版本使用方式

    Spring?Security全新版本使用方式

    這篇文章主要介紹了Spring?Security全新版本的使用方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • java實(shí)現(xiàn)攝像頭截圖功能

    java實(shí)現(xiàn)攝像頭截圖功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)攝像頭截圖功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • SpringBoot連接MYSQL數(shù)據(jù)庫并使用JPA進(jìn)行操作

    SpringBoot連接MYSQL數(shù)據(jù)庫并使用JPA進(jìn)行操作

    今天給大家介紹一下如何SpringBoot中連接Mysql數(shù)據(jù)庫,并使用JPA進(jìn)行數(shù)據(jù)庫的相關(guān)操作。
    2017-04-04
  • 詳細(xì)聊一聊java中封裝的那點(diǎn)事

    詳細(xì)聊一聊java中封裝的那點(diǎn)事

    封裝是一個非常廣泛的概念,小到一個屬性的封裝,大到一個框架或者一個項(xiàng)目的封裝,下面這篇文章主要給大家介紹了關(guān)于java中封裝的那點(diǎn)事,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Spring之IOC詳解

    Spring之IOC詳解

    本文主要介紹了Spring中的IOC的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • Java實(shí)現(xiàn)的簡單字符串反轉(zhuǎn)操作示例

    Java實(shí)現(xiàn)的簡單字符串反轉(zhuǎn)操作示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡單字符串反轉(zhuǎn)操作,結(jié)合實(shí)例形式分別描述了java遍歷逆序輸出以及使用StringBuffer類的reverse()方法兩種字符串反轉(zhuǎn)操作技巧,需要的朋友可以參考下
    2018-08-08
  • 用Java實(shí)現(xiàn)24點(diǎn)游戲

    用Java實(shí)現(xiàn)24點(diǎn)游戲

    喜歡玩游戲的有福啦,文中有非常詳細(xì)的開發(fā)框架,按著框架來實(shí)現(xiàn)就好啦.而且24點(diǎn)游戲是經(jīng)典的紙牌益智游戲.,需要的朋友可以參考下
    2021-05-05
  • 在java中使用dom4j解析xml(示例代碼)

    在java中使用dom4j解析xml(示例代碼)

    鑒于目前的趨勢,我們這里來講講Dom4j的基本用法,不涉及遞歸等復(fù)雜操作。Dom4j的用法很多,官網(wǎng)上的示例有那么點(diǎn)兒晦澀,這里就不寫了
    2013-10-10
  • Java后端Tomcat實(shí)現(xiàn)WebSocket實(shí)例教程

    Java后端Tomcat實(shí)現(xiàn)WebSocket實(shí)例教程

    WebSocket protocol 是HTML5一種新的協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。一開始的握手需要借助HTTP請求完成握手。本文給大家介紹Java后端Tomcat實(shí)現(xiàn)WebSocket實(shí)例教程,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05

最新評論