java調用C++ DLL庫方法

  最近一個項目要開發網頁端人臉識別項目,人臉識別的算法已經寫好,是C++版,可是網頁端要求使用Java後臺,這就涉及到Java調用DLL的問題。通過查找,實現了一個簡單的例子。java

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

   

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

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

而後執行命令javah Java2cpp生成Java2cpp.h頭文件,可是這一步每每會失敗,另外一種方法能夠成功,進入eclipse項目的目錄,進入bin文件夾,執行命令javah -classpath . -jni 包名.類名(com.test.jni.Java2cpp),而後生成了com_test_jni_Java2cpp.h函數

三、在VS中新建項目win32項目,命名爲:TestJNI第二步選擇以下:spa

四、把第二步生成的頭文件拷進項目文件夾,而後導入。命令行

五、實現頭文件中的方法:code

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

#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實現上述方法,代碼以下:ip

#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程序便可。結果以下:

相關文章
相關標籤/搜索