一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java如何調用C++ DLL庫

Java如何調用C++ DLL庫

2020-05-21 11:53Joseph_buaa JAVA教程

本文重點給大家介紹java中調用c++ dll庫的方法,本文分步驟介紹的非常詳細,感興趣的朋友可以參考下

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

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

Java如何調用C++ DLL庫

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

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

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

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

Java如何調用C++ DLL庫

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

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

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

?
1
2
3
4
5
#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實現上述方法,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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方法,添加完之后代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 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。【這一步生成會失敗,按照如下添加路徑】

Java如何調用C++ DLL庫

6 調用方法

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

Java如何調用C++ DLL庫

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人午夜视频一区二区国语 | 国产特黄一级一片免费 | 摸咪网在线影院在线观看 | 亚洲国产精品久久网午夜小说 | 欧美区一区 | 猛吸奶水的老汉 | 女娃开嫩苞经历小说 | 亚洲成年男人的天堂网 | 午夜一级影院 | 高清视频在线播放 | 国产激情视频在线 | 亚洲天堂99 | 国产精品视频在线观看 | 亚洲成综合 | h肉动漫在线视频无修无遮挡 | 鸥美三级 | 亚飞与亚基国语1080p在线观看 | 日本人妖视频 | 韩日理论片| 国产日韩一区二区 | 成人午夜剧场 | 99久久久久国产 | 精品一区二区三区 不卡高清 | 国产精品自在线 | 亚洲免费国产 | 二区免费视频 | 黄网在线观看免费网站台湾swag | 好吊色网站 | 色天使亚洲综合在线观看 | 日韩国产欧美一区二区三区 | 久久久久久久久女黄 | 国产真实偷乱视频在线观看 | 亚洲尿尿 | 免费理伦片在线观看全网站 | 国产色资源| 精品91自产拍在线 | 日本高清va不卡视频在线观看 | 四虎影视在线影院在线观看 | 视频一区二区三区欧美日韩 | 日韩欧美综合在线二区三区 | se01在线看片 |