脫掉JNI的外衣(-)

來源:互聯網
上載者:User
 

脫掉JNI的外衣     我們都知道java是一種跨平台語言,而且是一種完全oo的語言,在本身的語言特性上也是使用非常的方便易用,所以是大多項目優先選用的一種開發平台,尤其在處理業務性比較強的系統上更是開發的迅捷便利,那麼它也有一些缺憾,在處理本地方法的時候很乏力,因為我們不能夠直接對記憶體直接操作,記憶體管理都是通過JVM來處理的.因此對於底層開發來說並不是一個好的選擇,因此我們在涉及到底層開發的時候會用c/c++來處理,那麼如果在一個業務系統中,有部分子系統需要調用底層的應用,或者第三方提供的底層控制項那麼我們如何處理呢(比如說社會保險中醫學子系統中需要讀取使用者的卡資訊)?JNI是我們的一個好選擇. 一個簡單jni調用首先如果要在java中定義一個本地方法需要對於這個方法加上關鍵字native,那麼我們舉個例子,定義一個方法名字叫dosoming,在java中如下表示    public native void dosoming();當然定義這個本地方法後是要實現它的,那麼我們在c++中需要建立.h和.cpp兩個檔案,在jdk中提供了我們一個工具,可以協助我們產生.h檔案.在jdk bin目錄下的javah.exe.注意在使用它的時候我們需要切換到classpath下然後輸入命令,需要把class檔案的完整的包路徑輸入進去,格式如下Javah test.jni.JNITest這樣在我們的目錄下就會產生一個根據包路徑命名的一個.h檔案,在我例子中是test_jni_JNITest.h,裡面會把在java中所有定義為native的方法包含在.h檔案中,函數原型如下JNIEXPORT void JNICALL Java_test_jni_JNITest_dosoming (JNIEnv *, jobject);我們用vc++6.0建立一個動態庫win32的控制台工程,把test_jni_JNITest.h加入進來,再根據函數原型,我們再建立一個cpp檔案,裡面簡單寫個簡單的控制台輸出,並且把標頭檔包含進來.JNIEXPORT void JNICALL Java_test_jni_JNITest_dosoming(JNIEnv * env, jobject obj){               cout<<”http://blog.csdn.net/zxm0412”<<endl;}編譯工程,會提示找不到jni.h和jni_md.h這是因為沒有吧.h檔案include到工程裡面來,在tool->options->directories下可以設定.編譯通過後我們產生一個dll檔案,需要把這個dll檔案放到系統path路徑下,這樣我們的java程式就能夠找到它了Java調用端的代碼如下 public static void main(String[] args)    {        JNITest test = new JNITest();        System. loadLibrary("testJNI");//載入dll檔案,這裡不要放尾碼        test.dosoming();}輸出結果:http://blog.csdn.net/zxm0412這樣一個簡單的JNI就例子就成功了,如果要使用第三方提供的dll只需要把它載入進來我們就能使用了,哈哈,簡單吧大家可能注意到了在調用Java_test_jni_JNITest_dosoming的時候有兩個參數,那麼這兩個參數是幹什麼用的呢?今天就寫到這,下次再做一個詳細的解釋吧

 

聯繫我們

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