最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

采用的方法是JNI: Java Native Interface,簡(jiǎn)稱(chēng)JNI,是Java平臺(tái)的一部分,可用于讓Java和其他語(yǔ)言編寫(xiě)的代碼進(jìn)行交互。

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

 

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

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

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

1、建java類(lèi):裝載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這個(gè)頭文件的內(nèi)容是不能修改的,否則會(huì)出錯(cuò)。

3、制做VC動(dòng)態(tài)庫(kù): 創(chuàng)建一個(gè)C/C++動(dòng)態(tài)庫(kù)工程,命名為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()四個(gè)函數(shù)在別一個(gè)

文件中實(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í)工程還編譯不過(guò),因?yàn)閕nclude<jni.h>出錯(cuò),需添加JNI所在的目錄,如下:

 

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

 

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

 

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

總結(jié)

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

  • springboot如何讀取自定義屬性

    springboot如何讀取自定義屬性

    大家好,本篇文章主要講的是springboot如何讀取自定義屬性,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • SpringBoot實(shí)現(xiàn)RAS+AES自動(dòng)接口解密

    SpringBoot實(shí)現(xiàn)RAS+AES自動(dòng)接口解密

    本文主要介紹了SpringBoot實(shí)現(xiàn)RAS+AES自動(dòng)接口解密,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 微信跳一跳刷分java代碼實(shí)現(xiàn)

    微信跳一跳刷分java代碼實(shí)現(xiàn)

    這篇文章主要介紹了微信跳一跳刷分java代碼實(shí)現(xiàn),還為大家分享了java刷微信跳一跳問(wèn)題集,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行

    Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行

    這篇文章主要介紹了Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot過(guò)濾敏感詞的兩種實(shí)現(xiàn)方式

    SpringBoot過(guò)濾敏感詞的兩種實(shí)現(xiàn)方式

    Spring Boot本身并不直接提供過(guò)濾敏感詞的功能,但你可以使用第三方庫(kù)或者自定義過(guò)濾器來(lái)實(shí)現(xiàn)這個(gè)需求,所以本文給大家介紹了SpringBoot過(guò)濾敏感詞的兩種實(shí)現(xiàn)方式,感興趣的朋友可以參考下
    2024-06-06
  • Java(enum)枚舉用法詳解

    Java(enum)枚舉用法詳解

    本篇文章主要介紹了Java 枚舉用法詳解,枚舉的好處:可以將常量組織起來(lái),統(tǒng)一進(jìn)行管理。有興趣的可以一起來(lái)了解一下。
    2016-11-11
  • SpringMVC Validator驗(yàn)證示例

    SpringMVC Validator驗(yàn)證示例

    SpringMVC服務(wù)器驗(yàn)證一種是有兩種方式,一種是基于Validator接口,一種是使用Annotaion JSR-303標(biāo)準(zhǔn)的驗(yàn)證,本篇文章主要介紹,有興趣的可以了解一下。
    2017-01-01
  • SpringCloud實(shí)現(xiàn)Redis在各個(gè)微服務(wù)的Session共享問(wèn)題

    SpringCloud實(shí)現(xiàn)Redis在各個(gè)微服務(wù)的Session共享問(wèn)題

    Redis是運(yùn)行在內(nèi)存中,查取速度很快。本文重點(diǎn)給大家介紹SpringCloud實(shí)現(xiàn)Redis在各個(gè)微服務(wù)的Session共享,感興趣的朋友一起看看吧
    2018-08-08
  • SpringBoot整合Swagger頁(yè)面禁止訪問(wèn)swagger-ui.html方式

    SpringBoot整合Swagger頁(yè)面禁止訪問(wèn)swagger-ui.html方式

    本文介紹了如何在SpringBoot項(xiàng)目中通過(guò)配置SpringSecurity和創(chuàng)建攔截器來(lái)禁止訪問(wèn)SwaggerUI頁(yè)面,此外,還提供了禁用SwaggerUI和Swagger資源的配置方法,以確保這些端點(diǎn)和頁(yè)面對(duì)外部用戶不可見(jiàn)或無(wú)法訪問(wèn)
    2025-02-02
  • 最新評(píng)論

    新邵县| 泰州市| 长沙县| 阿瓦提县| 如东县| 乐安县| 日土县| 隆子县| 沙坪坝区| 出国| 黔江区| 武汉市| 上杭县| 景宁| 黄骅市| 巍山| 柏乡县| 大冶市| 家居| 津南区| 老河口市| 永川市| 大城县| 灵宝市| 肇州县| 吉首市| 集安市| 阳东县| 拜泉县| 尼勒克县| 资源县| 牡丹江市| 南川市| 九龙县| 谢通门县| 永济市| 友谊县| 广德县| 公安县| 治县。| 宜昌市|