Java如何調用C++ DLL庫_java

來源:互聯網
上載者:User

 最近做了一個網頁端Face Service的項目,用c++寫了Face Service的演算法,但是在網頁端要使用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.hCTestJNI::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庫的全部敘述,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.