Java通過調用C/C++實現的DLL動態庫——JNI的方法,javajni

來源:互聯網
上載者:User

Java通過調用C/C++實現的DLL動態庫——JNI的方法,javajni

由於項目的需要,最近研究了java 調用DLL的方法,將如何調用的寫於此,便於日後查閱:

採用的方法是JNI: Java Native Interface,簡稱JNI,是Java平台的一部分,可用於讓Java和其他語言編寫的代碼進行互動。

下面是從網上摘取的JNI工作:

 

總體說明:先在JAVA中建立一個類,通過javac產生.class,再由javah產生.h;然後將.h複製到VC下,由VC實現具體函,

並編譯通過後產生DLL,將DLL放入JAVA工程中使用,完畢。

下面說說具體步驟(含執行個體):

1、建java類:裝載DLL,聲明要使用DLL方法,具體實現由DLL負責;代碼如下:

public class Java2cpp{static{System.loadLibrary("javaCallcpp");}public native int DLL_ADD(int a,int b); //加public native int DLL_SUB(int a,int b); //減public native int DLL_MUL(int a,int b); //乘public native int DLL_DIV(int a,int b); //除public static void main(String args[]){int sum = 0;Java2cpp test = new Java2cpp();sum = test.DLL_ADD(2, 4);System.out.println("Java call cpp dll result:" + sum);}}

2、產生.h檔案:cmd 到Java2cpp.java目錄下,做如下操作:

第一步:javac Java2cpp.java 產生java2cpp.class

第二步:javah Java2cpp 產生Java2cpp.h標頭檔,內容如下:

注意:Java2cpp.h這個標頭檔的內容是不能修改的,否則會出錯。

3、製做VC動態庫: 建立一個C/C++動態庫工程,命名為javaCallcpp,匯入java2cpp.h並實現其方法:

#include "Java2cpp.h"#include "dllApi.h"JNIEXPORT jint JNICALL Java_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_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_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_Java2cpp_DLL_1DIV(JNIEnv *env, jobject obj, jint a, jint b){int var = 0;var = DLL_API_DIV(a,b);return var;} //此檔案完

加DLL_API_ADD()、減DLL_API_SUB()、乘DLL_API_MUL()、除DLL_API_DIV()四個函數在別一個

檔案中實現,檔案名稱是dllApi.cpp,實現如下:

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);} //此檔案完

此時工程還編譯不過,因為include<jni.h>出錯,需添加JNI所在的目錄,如下:

 

4、編譯動態庫工程:產生javaCallcpp.dll,並將這個動態庫複製到java工程目錄下:

 

5、使用DLL:運行java程式,結果如下:

 

至此,java調用dll已經完成。

總結

以上所述是小編給大家介紹的Java通過調用C/C++實現的DLL動態庫——JNI的方法,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對幫客之家網站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.