奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

Java程序如何調用C/C++語言函數

時間:2024-10-29 11:30:54 java語言 我要投稿
  • 相關推薦

Java程序如何調用C/C++語言函數

  導語:我們可以利用C語言的強大功能實現Java難以實現的功能,在一定程序上消除Java的局限性和低效率。 下面就由小編為大家介紹一下Java程序如何調用C/C++語言函數,歡迎大家閱讀!

  JNI是Java Native Interface的英文縮寫,中文翻譯為本地調用,自從Java 1.1開始就成為了Java標準的一部分。

  C/C++是系統級的編程語言,可以用來開發任何和系統相關的程序和類庫, 但是Java本身編寫底層的應用比較難實現,使用JNI可以調用現有的本地庫,極大地靈活了Java的開發。

  C/C++的效率是目前最好的語言,可以使用C/C++來實現一些實時性非常高的部分。 C/C++和Java本身都是非常流行的編程語言,一些大型軟件中經常使用語言之間的混合編程。

  一、創建DLL文件

  使用某一種C/C++開發工具創建Dll文件,實現某一功能,供JAVA調用,例如本文在此使用Visual studio 2005創建一個名為testdll的動態庫文件。

  二、使用JNI

  JNI是Java Native Interface的縮寫,中文為JAVA本地調用。它允許Java代碼和其他語言寫的代碼進行交互。

  1.JAVA類

  在JAVA程序中,首先需要在類中聲明所調用的庫名稱,如下:

  static {

  System.loadLibrary(“testdll”); //加載動態庫,testdll為DLL文件名稱

  }

  還需要對將要調用的方法做本地聲明,關鍵字為native。并且只需要聲明,而不需要具體實現。如下:

  public native static void set(int i);

  public native static int get();

  然后編譯該JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就會生成C/C++的頭文件。

  例如程序testdll.java,內容為:

  public class testdll { static { System.loadLibrary(“testdll”); } public native static int get(); public native static void set(int i); public static void main(String[] args) { testdll test = new testdll(); test.set(10); System.out.println(test.get()); } }

  用javac testdll.java編譯它,會生成testdll.class。

  再用javah testdll,則會在當前目錄下生成testdll.h文件,這個文件需要被C/C++程序調用來生成所需的庫文件。

  2.C/C++

  創建C/C++項目需要增加的頭文件有jni.h、jni_md.h這兩個文件是JNI中必須的;還有就是增加testdll.h。

  對于已生成的.h頭文件,C/C++所需要做的,就是把它的各個方法具體的實現。然后編譯連接成庫文件即可。再把庫文件拷貝到JAVA程序的路徑下面,就可以用JAVA調用C/C++所實現的功能了。

  接上例子。我們先看一下testdll.h文件的內容:

  #include #ifndef _Included_testdll #define _Included_testdll #ifdef __cplusplus extern "C" { #endif JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass); JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint); #ifdef __cplusplus } #endif #endif

  在具體實現的時候,我們只關心兩個函數原型 JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass);和 JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint);這里JNIEXPORT和JNICALL都是JNI的關鍵字,表示此函數是要被JNI調用的。而jint是以JNI為中介使JAVA的int類型與本地的int溝通的一種類型,我們可以視而不見,就當做int使用。函數的名稱是JAVA_再加上java程序的package路徑再加函數名組成的。參數中,我們也只需要關心在JAVA程序中存在的參數,至于JNIEnv*和jclass我們一般沒有必要去碰它。

  下面我們用testdll.cpp文件具體實現這兩個函數:#include "testdll.h" int i = 0; JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass) { return i; } JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint j) { i = j+5; }

  編譯連接成庫文件,這里就是testdll.dll。把testdll.dll拷貝到testdll.class的目錄下,java testdll運行它,就可以觀察到結果了。

  三、總結

  使用JNI可以在JAVA中調用其它語言編寫的代碼,在一定程度上消除JAVA的局限性和低效率。

【Java程序如何調用C/C++語言函數】相關文章:

Java程序調用C/C++語言函數的方法07-31

C++如何調用matlab函數06-29

C++調用C函數的方法05-21

java調用c函數的實例09-16

C語言函數的遞歸調用08-26

C語言函數的運用及調用10-09

C語言程序的可讀性和函數的調用09-09

C語言函數的遞歸和調用08-22

C語言函數調用與參數傳遞08-05

如何在C語言中調用C++做的動態鏈接庫08-15

主站蜘蛛池模板: 青川县| 馆陶县| 濉溪县| 满洲里市| 尼玛县| 集贤县| 济源市| 同心县| 天镇县| 丹东市| 双桥区| 济南市| 诸暨市| 青河县| 江阴市| 盐边县| 喀喇沁旗| 商水县| 泗水县| 东平县| 宁南县| 韩城市| 甘孜县| 汕头市| 儋州市| 忻州市| 张家界市| 新巴尔虎左旗| 崇州市| 永平县| 内乡县| 扎赉特旗| 商丘市| 广州市| 榆中县| 昭通市| 阿拉善右旗| 大同市| 龙胜| 龙游县| 修文县|