Jni接口


一、基本概念

  Jni是Java Native Interface的英文縮寫,意思是JAVA本地接口。通俗點的意思就是用JAVA調用C或者C++。在實際開發過程中很可能會使用到C或者C++開發的DLL,這個時候就需要用JAVA來調用DLL。

二、實現一個簡單的Jni

  1、編寫一個簡單的JAVA類(Test.java)

  public class Test {

        public native void firstTest(); 

      public static void main(String[] args) {    

      }

  }

  這段代碼中,使用native關鍵字來修飾 firstTest()方法。這個firstTest方法就是將要在C或者C++中實現的方法。

  2、獲得.h頭文件

  首先確保環境變量配置正確。編譯Test.java類,我的項目目錄是:E:\Java#project\Jni。然后在CMD下執行以下命令:

  

  命令運行成功后,會在E:\Java#project\Jni\bin目錄下生成com_test01_Test.h文件。

  剛才使用javah命令是JDK自帶的命令,就是用來生成.h文件的。如果想查看javah,請打開JDK目錄:D:\Program Files\Java\jdk1.6.0_13\bin。

  3、編寫C++.NET程序

  這里說明下 哈,本人不太會C++,所以這里就只能寫C++.NET程序來測試下了。效果都是一樣的。

  (1)打開VS2008,新建一個C++工程,如下圖:

  

  (2)將com_test01_Test.h頭文件引入到項目中

  

  將D:\Program Files\Java\jdk1.6.0_13\include下的jni.h文件 和 D:\Program Files\Java\jdk1.6.0_13\include\win32下的jni_md.h文件拷貝到項目根目錄下,打開將com_test01_Test.h,將最上面的#include <jni.h>修改為#include "jni.h"。然后在源文件的Jni01.cpp中 引入com_test01_Test.h 並編項目,如下圖所示:

  

  (3)在C++.net程序中實現Jni方法

   打開com_test01_Test.h文件,會看見如下代碼:

  #include "jni.h" /* Header for class com_test01_Test */

  #ifndef _Included_com_test01_Test

  #define _Included_com_test01_Test

  #ifdef __cplusplus

  extern "C" {

     JNIEXPORT void JNICALL Java_com_test01_Test_firstTest   (JNIEnv *, jobject);

    #ifdef __cplusplus }

   #endif

  #endif

  其中JNIEXPORT void JNICALL Java_com_test01_Test_firstTest   (JNIEnv *, jobject); 就是第一步Test.java類中firstTest()方法在C++.net程序中的體現,下面將Java_com_test01_Test_firstTest這個方法在Jni01.cpp中實現一下,然后編譯整個項目。Jni01.cpp的代碼如下:

  #include "stdafx.h"

  #include "WINSCARD.H"

  #include "com_test01_Test.h" using namespace System;

  int main(array<System::String ^> ^args) {    

    Console::WriteLine(L"Hello World");    

    return 0;

  }

  //實現Java_com_test01_Test_firstTest方法

  JNIEXPORT void JNICALL Java_com_test01_Test_firstTest(JNIEnv *, jobject){  

    Console::WriteLine(L"第一個Jni小程序");

  }

  4、將Jni01.dll配置到環境變量中

  上一步操作編譯完成后,打開項目文件,我的電腦上目錄是:E:\C#project\Jni\Debug,找到Jni01.dll文件,這個文件就是最后得到的dll。為了JAVA程序運行時能找到這個DLL,所以要在環境變量上配置一下,找到環境變量中的”path“,打開如下圖所示:

  

  將C++.net程序的項目debug文件夾路徑E:\C#project\Jni\Debug 配置到環境變量。如圖:

  

  5、在Java程序中測試一下。

  在第一步操作中的Test.java類的main方法中寫如下測試代碼:

  public static void main(String[] args) {   

    System.loadLibrary("Jni01");   

    new Test().firstTest();  

  }

  其中System.loadLibrary方法就是用來加載DLL文件的,參數名就是DLL文件的名字(注:本列中DLL文件是Jni01.dll,這里的參數只填寫Jni01,沒有后綴名)。

  運行Test.java,效果如下:

  

  

  以上就是用Jni實現Java調用C++的一個簡單小程序,謝謝!

  

  

 

  

 

  

 

 

  

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM