程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java若何挪用C++ DLL庫

Java若何挪用C++ DLL庫

編輯:關於JAVA

Java若何挪用C++ DLL庫。本站提示廣大學習愛好者:(Java若何挪用C++ DLL庫)文章只能為提供參考,不一定能成為您想要的結果。以下是Java若何挪用C++ DLL庫正文


 比來做了一個網頁端人臉辨認的項目,用c++寫了人臉辨認的算法,然則在網頁端要應用java後台,這個中就觸及到了java挪用dll的成績。上面是小編經由過程查閱相干材料,完成的一個簡略例子。

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

如上圖,個中留意這句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第二步選擇以下:

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庫的全體論述,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved