java 中如何調用vc++的dll


     雖然java已經能夠幫我們做了很多事情,幾乎大部分的東西現在都可以用java來編寫,但是有很多時候,用c++能夠更好的實現系統的一些功能,因此,在java中調用c++編寫的東西就顯得十分的必要。這邊文章將爲你介紹用java調用vc++編寫的工程的dll文件。


1.。編寫java的類,這個類中System.loadLibrary()是加載動態鏈接庫,SallyDLL是由c++產生的文件,等下將有介紹,
public native int add(int num1, int num2);是一個聲明的方法,該方法的實現是由c++完成的,在java中可以跟一般
的方法一樣調用。
  1. package testJNI.test;
  2. public class TestDLL
  3. {
  4.     static
  5.     {
  6.         System.loadLibrary("SallyDLL");
  7.     }
  8.     
  9.     public native int add(int num1, int num2);
  10. }
2..編譯上面的類。我使用eclipse寫的,自動編譯,打開cmd,進入到java工程的bin下。
使用命令:javah -classpath . -jni testJNI.test.TestDLL
這時會生成.h文件:testJNI_test_TestDLL.h
.h文件內容如下:
  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class testJNI_test_TestDLL */
  4. #ifndef _Included_testJNI_test_TestDLL
  5. #define _Included_testJNI_test_TestDLL
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10.  * Class:     testJNI_test_TestDLL
  11.  * Method:    testOutput
  12.  * Signature: (II)I
  13.  */
  14. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
  15.   (JNIEnv *, jobject, jint, jint);
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif
3..用vc++建立DLL工程,
   注:將testJNI_test_TestDLL.h    copy到工程下
       將jdk/include下的jniport.h   copy到工程下
       將jdk/include下的jni.h    copy到VC++安裝目錄下的include   如C:/Program Files/Microsoft Visual Studio   9.0/VC/include  下面

4..編寫add方法的實現,新建testDll.cpp  代碼如下:
  1. #include "stdafx.h"
  2. #include "testJNI_test_TestDLL.h"
  3. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
  4.   (JNIEnv * env, jobject obj, jint num1, jint num2)
  5. {
  6.         return num1 + num2;
  7. }
5..Build C++工程,得到DLL文件,將文件的名改爲,   SallyDLL.dll   以上面一致,並將dll文件放到jdk的bin中


6..測試,編寫java測試代碼  在java中調用c++
  1. public class TestDLLMain
  2. {
  3.     /**
  4.      * @param args
  5.      */
  6.     public static void main(String[] args)
  7.     {
  8.         // TODO Auto-generated method stub
  9.         TestDLL test = new TestDLL();
  10.         System.out.println(test.add(20, 30));
  11.     }
  12. }
可以看到輸出爲 50


通過上面的方法就實現了java調用c++編寫的東西

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章