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

visual studio2022 JNI開發(fā)流程的實(shí)現(xiàn)

 更新時(shí)間:2025年07月23日 09:46:31   作者:L-960  
本文主要介紹了通過IDEA創(chuàng)建Maven項(xiàng)目并生成JNI頭文件,使用Visual Studio 2022構(gòu)建DLL,最后在Java中加載并調(diào)用C++實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

1 創(chuàng)建java類

使用idea創(chuàng)建一個(gè)maven項(xiàng)目,名為jni-demo,并創(chuàng)建一個(gè)類JniTest

package com.example;

public class JniTest {

    public native void printExt();
    
}

整體結(jié)構(gòu)如下:

在這里插入圖片描述

2 生成JNI頭文件

利用java類生成C頭文件,命令如下,注意要在包的根路徑執(zhí)行,也就是src\main\java目錄下:

javah -classpath . -jni com.example.JniTest
  • 如果文件中有中文,需要指定格式,如格式為UTF-8 需要添加 -encoding UTF-8

  • 參數(shù)解析:
    -classpath [class]指定類的路徑
    -jni [類名] 需要生成的類名稱,注意不帶.java

執(zhí)行后生成了如下頭文件com_example_JniTest.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_JniTest */

#ifndef _Included_com_example_JniTest
#define _Included_com_example_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_JniTest
 * Method:    printExt
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_example_JniTest_printExt
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

3 使用visual studio2022創(chuàng)建DLL項(xiàng)目

3.1 選擇模板中(Windows桌面向?qū)В?/h3>

在這里插入圖片描述

如果沒有這個(gè)模板則安裝:

在這里插入圖片描述

3.2 為項(xiàng)目命名

在這里插入圖片描述

3.3 選擇應(yīng)用程序類型為動(dòng)態(tài)鏈接庫

在這里插入圖片描述

3.4 項(xiàng)目概覽

在這里插入圖片描述

4 導(dǎo)入需要的頭文件

4.1 導(dǎo)入需要的頭文件

將第二步生成的com_example_JniTest.h文件、JDK目錄的include目錄下有一個(gè)jni.h文件、和JDK目錄下的\include\win32下的jni_md.h文件復(fù)制到visual studio2022創(chuàng)建的項(xiàng)目中,如下:

在這里插入圖片描述

然后在visual studio2022中點(diǎn)擊頭文件->添加->現(xiàn)有項(xiàng),找到上述三個(gè)頭文件,添加即可。

4.2 修改頭文件

找到jni.h文件中#include <jni_md.h>修改為#include "jni_md.h",如下:

在這里插入圖片描述

找到com_example_JniTest.h文件中#include <jni.h>修改為#include "jni.h"",如下:

在這里插入圖片描述

5 編寫C++實(shí)現(xiàn)

visual studio2022中點(diǎn)擊源文件->添加->新建項(xiàng),選擇C++文件,命名為MyJinCpp.cpp,然后在MyJinCpp.cpp編寫如下內(nèi)容:

#pragma execution_character_set("utf-8")//設(shè)置字符編碼,不然java中顯示亂碼
#include "com_example_JniTest.h"
#include <iostream>
using namespace std;//引入命名空間std,使得std::cout和std::endl可以直接省去std::


JNIEXPORT void JNICALL Java_com_example_JniTest_printExt
(JNIEnv*, jobject) {
	cout << "現(xiàn)在你正在調(diào)用c++的實(shí)現(xiàn)" << endl;
}

6 生成dll文件

visual studio2022中右鍵點(diǎn)擊生成,輸出會(huì)顯示一個(gè)dll的地址,復(fù)制這個(gè)地址,接下來java要用:

在這里插入圖片描述

7 在java中進(jìn)行測試

修改Main類,如下:

注意:

  • 使用System.load直接加載任意位置的動(dòng)態(tài)鏈接庫,需要指定全路徑以及擴(kuò)展名
  • 使用System.loadLibrary加載java.library.path這一jvm變量所指向的路徑中位置的動(dòng)態(tài)鏈接庫,不需要指定全路徑以及擴(kuò)展名可以通過System.getProperty("java.library.path")方法來獲得該變量的值
package com.example;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {

    static {
        System.load("D:\\ItemProjects\\cpp\\JniProject\\x64\\Debug\\JniProject.dll");
    }

    public static void main(String[] args) {
        new JniTest().printExt();
    }
}

運(yùn)行結(jié)果:

現(xiàn)在你正在調(diào)用c++的實(shí)現(xiàn)

Process finished with exit code 0

到此這篇關(guān)于visual studio2022 JNI開發(fā)流程的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)visual studio2022 JNI開發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA中關(guān)于enter鍵換行的問題

    IDEA中關(guān)于enter鍵換行的問題

    這篇文章主要介紹了IDEA中關(guān)于enter鍵換行的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • PageHelper插件實(shí)現(xiàn)一對(duì)多查詢時(shí)的分頁問題

    PageHelper插件實(shí)現(xiàn)一對(duì)多查詢時(shí)的分頁問題

    這篇文章主要介紹了PageHelper插件實(shí)現(xiàn)一對(duì)多查詢時(shí)的分頁問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法

    mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法

    本文主要介紹了mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Mybatis插件之自動(dòng)生成不使用默認(rèn)的駝峰式操作

    Mybatis插件之自動(dòng)生成不使用默認(rèn)的駝峰式操作

    這篇文章主要介紹了Mybatis插件之自動(dòng)生成不使用默認(rèn)的駝峰式操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • java加載屬性配置properties文件的方法

    java加載屬性配置properties文件的方法

    這篇文章主要介紹了java加載屬性配置properties文件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    Cursor.so 是一個(gè)集成了 GPT-4 的國內(nèi)直接可以訪問的,優(yōu)秀而強(qiáng)大的免費(fèi)代碼生成器,可以幫助你快速編寫、編輯和討論代碼,這篇文章主要介紹了智能 AI 代碼生成工具 Cursor 安裝和使用介紹,需要的朋友可以參考下
    2023-05-05
  • Springboot @Transactional使用時(shí)需注意的幾個(gè)問題記錄

    Springboot @Transactional使用時(shí)需注意的幾個(gè)問題記錄

    本文詳細(xì)介紹了Spring Boot中使用`@Transactional`注解進(jìn)行事務(wù)管理的多個(gè)方面,包括事務(wù)的隔離級(jí)別(如REPEATABLE_READ)和傳播行為(如REQUIRES_NEW),并指出了在同一個(gè)類中調(diào)用事務(wù)方法時(shí)可能遇到的問題以及解決方案,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Spring Boot中使用Server-Sent Events (SSE) 實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送教程

    Spring Boot中使用Server-Sent Events (SSE) 實(shí)

    Server-Sent Events (SSE) 是HTML5引入的一種輕量級(jí)的服務(wù)器向?yàn)g覽器客戶端單向推送實(shí)時(shí)數(shù)據(jù)的技術(shù),本文主要介紹了Spring Boot中使用Server-Sent Events (SSE) 實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送教程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 如何使用@Value和@PropertySource注入外部資源

    如何使用@Value和@PropertySource注入外部資源

    這篇文章主要介紹了如何使用@Value和@PropertySource注入外部資源的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spark?實(shí)現(xiàn)自定義加密的示例代碼

    Spark?實(shí)現(xiàn)自定義加密的示例代碼

    這篇文章主要介紹了Spark?實(shí)現(xiàn)自定義加密的示例代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-07-07

最新評(píng)論

神池县| 庐江县| 宿迁市| 平乐县| 镇坪县| 自贡市| 新绛县| 淮滨县| 林西县| 天门市| 方山县| 孟州市| 玛曲县| 高雄市| 满城县| 丹棱县| 徐闻县| 天门市| 增城市| 合肥市| 仙居县| 淅川县| 望都县| 天峻县| 阜新市| 沂源县| 柘荣县| 顺平县| 中江县| 红安县| 疏附县| 老河口市| 镶黄旗| 千阳县| 都昌县| 安国市| 揭东县| 疏勒县| 赤峰市| 马鞍山市| 亚东县|