中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

JNI的方(fang)式調用(yong)DLL(SO)(上(shang))

      最近有個(ge)項目(mu)要調用原有的(de)DLL文件,本來準備(bei)使(shi)用JNA,可是客戶(hu)不同意,非要使(shi)用JNI的(de)方式。萬(wan)般(ban)無(wu)奈(nai)之下,只能重新(xin)使(shi)用JNI,現將JAVA調用動態鏈接庫(ku)的(de)一(yi)般(ban)方法總結如下。

      JNI是(shi)Java Native Interface(JAVA本(ben)地調(diao)用)的(de)縮寫。從Java1.1開始(shi),Java Native Interface(JNI)標準成(cheng)為java平臺(tai)的(de)一部分,它允許Java代碼和其(qi)他語(yu)言(yan)寫的(de)代碼進行交互(hu)。JNI一開始(shi)是(shi)為了(le)(le)本(ben)地已編譯語(yu)言(yan),尤其(qi)是(shi)C和C++而設計的(de),但是(shi)它并不(bu)妨礙你使用其(qi)他語(yu)言(yan),只要(yao)調(diao)用約定受支持就可(ke)以(yi)了(le)(le)。

      使用JNI調用DLL文件的步驟(zou)一(yi)般有(you)以下幾步:

         1、編寫帶有native聲明的方法的java類

         2、使用javac命(ming)令編譯所編寫(xie)的java類

         3、使用javah命令編譯成頭文件 

         4、使用C/C++實現本地方(fang)法(包含第3步生成的頭文(wen)件)

         5、將(jiang)C/C++編寫的(de)文件(jian)生成動態連接(jie)庫

      下(xia)面將通過實(shi)例詳細介(jie)紹上(shang)面5步的(de)具(ju)體實(shi)現

–> 編寫帶有native聲明的方法的java類,代碼如下:

View Code
 1 package com.wanggc.jni;
 2 
 3 public class MyJniNativeMethods {
 4     /**
 5      * 取最大值。
 6      * 
 7      * @param data1
 8      *            數據1
 9      * @param data2
10      *            數據2
11      * @return
12      */
13     public native int getMaxData(int data1, int data2);
14 
15     /**
16      * 向某人(ren)問好。
17      * 
18      * @param name
19      *            人名(ming)
20      * @return
21      */
22     public native String getGreeting(String name);
23 
24     /**
25      * 加載動態鏈接庫(ku)
26      */
27     static {
28         System.loadLibrary("testJni");
29     }
30 
31     /**
32      * 入口主(zhu)函數。
33      * 
34      * @param args
35      */
36     public static void main(String[] args) {
37         MyJniNativeMethods jniTest = new MyJniNativeMethods();
38         // 調用第一(yi)個本地(di)方(fang)法得到兩(liang)個數中的(de)最(zui)大值
39         int maxData = jniTest.getMaxData(100, 150);
40         System.out.println(maxData);
41 
42         // 調用第二個本地方法想某人問好
43         String hello = jniTest.getGreeting("王國成");
44         System.out.println(hello);
45     }
46 }

      13行和22行包含(han)了兩(liang)個(ge)本地方(fang)法(fa)(fa),getMaxData和getGreeting,注意本地方(fang)法(fa)(fa)只需(xu)有方(fang)法(fa)(fa)名,不(bu)需(xu)要(yao)方(fang)法(fa)(fa)體。需(xu)要(yao)使用native關(guan)鍵字修飾。27-29行用于加載動態鏈接庫。注意DLL文件不(bu)要(yao)后綴,只要(yao)名稱就可以了。

–> 使用javac命令編譯所編寫的java類,如果是用eclipse編寫(xie)的(de)代碼,不須(xu)使用此命(ming)令,使用project菜單的(de)clean選項編譯一(yi)下(xia)就可(ke)以了(le)。

–> 使用javah命令編譯成頭文件 

     編譯好class文(wen)件后(hou),打開CMD窗口(kou),轉到bin目錄,運(yun)行

posted @ 2012-04-29 22:23  孤旅者  閱讀(5570)  評論(0)    收藏  舉報