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

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

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

1 創(chuàng)建java類

使用idea創(chuàng)建一個maven項目,名為jni-demo,并創(chuàng)建一個類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項目

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

在這里插入圖片描述

如果沒有這個模板則安裝:

在這里插入圖片描述

3.2 為項目命名

在這里插入圖片描述

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

在這里插入圖片描述

3.4 項目概覽

在這里插入圖片描述

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

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

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

在這里插入圖片描述

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

4.2 修改頭文件

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

在這里插入圖片描述

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

在這里插入圖片描述

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

visual studio2022中點擊源文件->添加->新建項,選擇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++的實現(xiàn)" << endl;
}

6 生成dll文件

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

在這里插入圖片描述

7 在java中進行測試

修改Main類,如下:

注意:

  • 使用System.load直接加載任意位置的動態(tài)鏈接庫,需要指定全路徑以及擴展名
  • 使用System.loadLibrary加載java.library.path這一jvm變量所指向的路徑中位置的動態(tài)鏈接庫,不需要指定全路徑以及擴展名可以通過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();
    }
}

運行結(jié)果:

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

Process finished with exit code 0

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

相關(guān)文章

  • Spring Boot利用Thymeleaf發(fā)送Email的方法教程

    Spring Boot利用Thymeleaf發(fā)送Email的方法教程

    spring Boot默認就是使用thymeleaf模板引擎的,下面這篇文章主要給大家介紹了關(guān)于在Spring Boot中利用Thymeleaf發(fā)送Email的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • JavaScript實現(xiàn)鼠標(biāo)移動粒子跟隨效果

    JavaScript實現(xiàn)鼠標(biāo)移動粒子跟隨效果

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)鼠標(biāo)移動粒子跟隨效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • java單例模式實現(xiàn)面板切換

    java單例模式實現(xiàn)面板切換

    這篇文章主要為大家詳細介紹了java單例模式實現(xiàn)面板切換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • java實現(xiàn)數(shù)字炸彈

    java實現(xiàn)數(shù)字炸彈

    這篇文章主要為大家詳細介紹了java實現(xiàn)數(shù)字炸彈,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Java向kettle8.0傳遞參數(shù)的方式總結(jié)

    Java向kettle8.0傳遞參數(shù)的方式總結(jié)

    介紹了如何在Kettle中傳遞參數(shù)到轉(zhuǎn)換和作業(yè)中,包括設(shè)置全局properties、使用TransMeta和JobMeta的parameterValue,以及通過EL表達式獲取參數(shù)值
    2025-01-01
  • SpringBoot使用Apache?Tika檢測敏感信息

    SpringBoot使用Apache?Tika檢測敏感信息

    Apache?Tika?是一個功能強大的內(nèi)容分析工具,它能夠從多種文件格式中提取文本、元數(shù)據(jù)以及其他結(jié)構(gòu)化信息,下面我們來看看如何使用Apache?Tika檢測敏感信息從而實現(xiàn)數(shù)據(jù)泄露防護吧
    2025-01-01
  • 詳解Java內(nèi)存泄露的示例代碼

    詳解Java內(nèi)存泄露的示例代碼

    這篇文章通過一個Demo來簡要介紹下ThreadLocal和ClassLoader導(dǎo)致內(nèi)存泄露最終OutOfMemory的場景。下面通過示例代碼給大家分享Java內(nèi)存泄露的相關(guān)知識,感興趣的朋友一起看看吧
    2017-12-12
  • 關(guān)于mybatis3中@SelectProvider的使用問題

    關(guān)于mybatis3中@SelectProvider的使用問題

    這篇文章主要介紹了mybatis3中@SelectProvider的使用技巧,@SelectProvide指定一個Class及其方法,并且通過調(diào)用Class上的這個方法來獲得sql語句,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • SpringBoot整合第三方技術(shù)的詳細步驟

    SpringBoot整合第三方技術(shù)的詳細步驟

    這篇文章主要介紹了SpringBoot整合第三方技術(shù),包括整合Junit、整合Mybatis、整合Mybatis-plus、整合Druid,本文通過實例代碼相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • JavaEE線程安全實現(xiàn)線程池方法

    JavaEE線程安全實現(xiàn)線程池方法

    這篇文章主要介紹了JavaEE線程安全實現(xiàn)線程池方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06

最新評論