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

Java如何調用C++ DLL庫

 更新時間:2016年06月27日 14:13:23   作者:Joseph_buaa  
本文重點給大家介紹java中調用c++ dll庫的方法,本文分步驟介紹的非常詳細,感興趣的朋友可以參考下

 最近做了一個網頁端人臉識別的項目,用c++寫了人臉識別的算法,但是在網頁端要使用java后臺,這其中就涉及到了java調用dll的問題。下面是小編通過查閱相關資料,實現的一個簡單例子。

1、第一步,先在Java中新建一個類

如上圖,其中注意這句System.loadLibrary("javaCallcpp");,這就是加載dll文件的代碼了。然后我們需要dll中實現下面定義的加減乘除方法。

2、編譯文件,文件名為Java2cpp.java,首先編譯成class文件,如果用的是eclipse,這個文件已經自動生成了,在工程目錄下的bin文件夾下。用命令行編譯,打開cmd窗口,cd到.java文件所在目錄,執(zhí)行命令javac Java2cpp.java,即生成Java2cpp.class

然后執(zhí)行命令javah Java2cpp生成Java2cpp.h頭文件,但是這一步往往會失敗,另一種方法可以成功,進入eclipse項目的目錄,進入bin文件夾,執(zhí)行命令javah -classpath . -jni 包名.類名(com.test.jni.Java2cpp),然后生成了com_test_jni_Java2cpp.h

3、在VS中新建項目win32項目,命名為:TestJNI第二步選擇如下:

4、把第二步生成的頭文件拷進項目文件夾,然后導入。

5、實現頭文件中的方法:

(1)新建頭文件dllApi.h,代碼如下:

#include "com_test_jni_Java2cpp.h"
int DLL_API_ADD(int a, int b);
int DLL_API_SUB(int a, int b);
int DLL_API_MUL(int a, int b);
int DLL_API_DIV(int a, int b); 

(2)新建dllApi.cpp實現上述方法,代碼如下:

#include "stdafx.h"
#include <iostream>
#include "dllApi.h"
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);
} 

(3)在TestJNI.cpp中添加代碼實現com_test_jni_Java2cpp.h方法,添加完之后代碼如下:

// TestJNI.cpp : 定義 DLL 應用程序的導出函數。
//
#include "stdafx.h"
#include "TestJNI.h"
#include "com_test_jni_Java2cpp.h"
#include "dllApi.h"
// 這是導出變量的一個示例
TESTJNI_API int nTestJNI=0;
// 這是導出函數的一個示例。
TESTJNI_API int fnTestJNI(void)
{
  return 42;
}
// 這是已導出類的構造函數。
// 有關類定義的信息,請參閱 TestJNI.h
CTestJNI::CTestJNI()
{
  return;
}
JNIEXPORT jint JNICALL Java_com_test_jni_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_com_test_jni_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_com_test_jni_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_com_test_jni_Java2cpp_DLL_1DIV(JNIEnv *env, jobject obj, jint a, jint b){
  int var = 0;
  var = DLL_API_DIV(a, b);
  return var;
}

(4)生成dll,在項目文件夾下的Debug文件夾內可以找到TestJNI.dll,但是因為我們在Java里要求dll名為JavaCallcpp,所以此時把項目重命名為JavaCallcpp,然后重新生成JavaCallcpp?!具@一步生成會失敗,按照如下添加路徑】

6 調用方法

把第五步生成的JavaCallcpp.dll拷進JRE安裝路徑下的bin文件夾內,運行java程序即可。結果如下:

以上所述是小編給大家介紹的Java如何調用C++ DLL庫的全部敘述,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • MyBatis標簽之Select?resultType和resultMap詳解

    MyBatis標簽之Select?resultType和resultMap詳解

    這篇文章主要介紹了MyBatis標簽之Select?resultType和resultMap,在MyBatis中有一個ResultMap標簽,它是為了映射select標簽查詢出來的結果集,下面使用一個簡單的例子,來介紹 resultMap 的使用方法,需要的朋友可以參考下
    2022-09-09
  • Java中的邏輯控制語句詳解

    Java中的邏輯控制語句詳解

    下面小編就為大家?guī)硪黄狫ava邏輯控制的基礎文章。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-08-08
  • 如何用Stream解決兩層List屬性求和問題

    如何用Stream解決兩層List屬性求和問題

    這篇文章主要介紹了如何用Stream解決兩層List屬性求和問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java數據結構之鏈表、棧、隊列、樹的實現方法示例

    Java數據結構之鏈表、棧、隊列、樹的實現方法示例

    這篇文章主要介紹了Java數據結構之鏈表、棧、隊列、樹的實現方法,結合實例形式分析了Java數據結構中鏈表、棧、隊列、樹的功能、定義及使用方法,需要的朋友可以參考下
    2019-03-03
  • Mybatis-plus多租戶項目實戰(zhàn)進階指南

    Mybatis-plus多租戶項目實戰(zhàn)進階指南

    多租戶是一種軟件架構技術,在多用戶的環(huán)境下共有同一套系統(tǒng),并且要注意數據之間的隔離性,下面這篇文章主要給大家介紹了關于Mybatis-plus多租戶項目實戰(zhàn)進階的相關資料,需要的朋友可以參考下
    2022-02-02
  • java 實現文件夾的拷貝實例代碼

    java 實現文件夾的拷貝實例代碼

    這篇文章主要介紹了java 實現文件夾的拷貝實例代碼的相關資料,需要的朋友可以參考下
    2017-04-04
  • Java實現字符數組全排列的方法

    Java實現字符數組全排列的方法

    這篇文章主要介紹了Java實現字符數組全排列的方法,涉及Java針對字符數組的遍歷及排序算法的實現技巧,需要的朋友可以參考下
    2015-12-12
  • 使用Swagger時Controller中api接口顯示不全的問題分析及解決

    使用Swagger時Controller中api接口顯示不全的問題分析及解決

    swagger是一個十分好用的api接口管理、測試框架,現在越來越多的人使用這個做接口的測試和管理,但經常遇到Controller中的api接口顯示不全的問題,所以本文給大家詳細分析了問題以及解決方法,需要的朋友可以參考下
    2024-02-02
  • Java elasticSearch-api的具體操作步驟講解

    Java elasticSearch-api的具體操作步驟講解

    這篇文章主要介紹了elasticSearch-api的具體操作步驟講解,本文通過詳細的步驟介紹和圖文代碼展示講解了該項技術,需要的朋友可以參考下
    2021-06-06
  • 深入理解Spring Aop的執(zhí)行順序

    深入理解Spring Aop的執(zhí)行順序

    本文將結合實例代碼,介紹Spring Aop的執(zhí)行順序,非常具有實用價值,需要的朋友可以參考下
    2021-06-06

最新評論