<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聚合 管理  

    Blog Stats

    News

    我使用新博客啦:
    http://www.linjunhai.com/
    大家到我的新博客上看看吧!

    隨筆分類(28)

    文章分類(4)

    隨筆檔案(53)

    文章檔案(4)

    相冊

    相關(guān)鏈接


    林俊海的博客

    超級大菜鳥,每天要自強!

    有些時候,要寫一些程序,在 JAVA 里面好難實現(xiàn), 但如果使用其它編程語言卻又比較容易時,我們不妨通過 JNI 來讓不同語言的程序共同完成.
    JNI 的教程, 網(wǎng)上 C 的比較多,Java 也提供了 javah.exe 為 C 語言的 JNI 程序生成頭文件, 如果你是一個 Delphi 編程員, 能否讓 JAVA 與 Delphi 程序交互呢? 答案是肯定的,今天我們就來看一下一個簡單的例子.
    Helloworld. 主要是來認識一下, JAVA 怎樣調(diào)用 Delphi 程序的方法.

    好的,我們先來創(chuàng)建一個類:

    package alvinJNI;

    class HelloWorld {
            static {
                    System.loadLibrary("DelphiAction"); //等一下我們就用Delphi來編一個程序,編好之后生成的文件就是 DelphiAction.dll 這是一個動態(tài)鏈接庫文件,這個類里先在靜態(tài)語句塊中加載它
            }

            public native void printText();   //聲明一個 native 的本地代碼程序,我們使用的是 Delphi 來編寫.注意:這個方法在這里只是聲明,并沒有定義方法體,因為這個方法我們要用 Delphi 來實現(xiàn).

            public static void main(String[] args) {
                    //創(chuàng)建對象并調(diào)用里面的 native 方法.
                    HelloWorld hw = new HelloWorld();
                    hw.printText();
            }

    }

    類寫完編譯后,接下來的事情就由 Delphi 來解決了

    我們運行 Delphi  后新建 DLL 工程: file->new->other,然后在 new 選項卡里面選擇 Dll Wizard 就創(chuàng)建了一個新的工程了,
    我們選擇一個文件夾來保存工程
    在保存工程后,我們需要下載 jni.pas 加入到我們的工程中,這是國外的高手寫的程序單元,它方便我們的 Delphi 程序與 JAVA 交互. 可從下面地址下載到:
    http://www.tkk7.com/Files/alvin/jni_pas.zip
    解壓之后里面有兩個文件,將其存放在工程的目錄下

    接下來我們編寫 Delphi 代碼:

    library DelphiAction;  //這里設(shè)置動態(tài)鏈接庫的名稱,因為我們剛才寫 JAVA 類時是用 DelphiAction,所以這里了要設(shè)置為 DelphiAction

    { Important note about DLL memory management: ShareMem must be the
            first unit in your library's USES clause AND your project's (select
            Project-View Source) USES clause if your DLL exports any procedures or
            functions that pass strings as parameters or function results. This
            applies to all strings passed to and from your DLL--even those that
            are nested in records and classes. ShareMem is the interface unit to
            the BORLNDMM.DLL shared memory manager, which must be deployed along
            with your DLL. To avoid using BORLNDMM.DLL, pass string information
            using PChar or ShortString parameters.     這里面都是注釋,是自動生成的,可以刪去 }

    Uses
            JNI;     //注意了,我們剛才下載了 JNI.pas 放在工程目錄中,這里要在 Uses 里面聲明,才能使用.

    //下面我們來寫一個函數(shù),就是為 剛才 JAVA 類實現(xiàn)一個簡單的方法
    //因為要讓 JAVA 能夠調(diào)用到這個函數(shù),所以這個函數(shù)的命名是非常講究的,名稱各段的分隔符是 _ 下劃線
    //本例的函數(shù)如下: 即 Java_包名_類名_類中的方法名
    //函數(shù)必須設(shè)置為 stdcall
    procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject); stdcall;
    begin
            //函數(shù)體非常簡單,因為我們只是了解一下如何調(diào)用 Delphi 的函數(shù).
            Writeln('您好!看到效果了吧。');
    end;

    exports
            Java_alvinJNI_HelloWorld_printText; //為函數(shù)做引出聲明,這樣才能真正的被調(diào)用到

    end.

    代碼完成,我們 Ctrl+F9 編譯 DLL
    生成 DelphiAction.dll 后,我們把他復(fù)制到 Java 工程目錄
    注意:上面的類是打包在 alvinJNI 包中
    假如我們的 Java 工程是在 C:/test
    那么剛才編譯后的類必須放在 c:/test/alvinJNI/HelloWorld.class
    而剛剛編譯完成的 DelphiAction.dll就放在 c:/test/DelphiAction.dll
    然后在 C:/test 目錄中執(zhí)行: java alvinJNI/HelloWorld
    看看你的 Java 程序調(diào)用了 DelphiAction 是怎么樣的效果.

    呵呵,爽吧! 今天我們才做了一點點,只學(xué)了一下如何在 JAVA 調(diào)用 Delphi 和程序,在接下來,我會貼出更多的教程,以學(xué)習(xí)一些高級一點點的 JNI 知識.

    posted on 2006-11-14 05:10 林俊海 閱讀(963) 評論(0)  編輯  收藏 所屬分類: JAVA天地
    主站蜘蛛池模板: 色爽黄1000部免费软件下载| 免费萌白酱国产一区二区| 一级做a毛片免费视频| 叮咚影视在线观看免费完整版| 免费**毛片在线播放直播| 国产偷国产偷亚洲清高APP| 日韩精品视频免费网址| 人人狠狠综合久久亚洲88| 中文字幕免费播放| 久久久久久99av无码免费网站 | 亚洲国产精品人人做人人爱| 亚洲av成人无码网站…| 国产v片免费播放| 日韩电影免费在线观看网址| 国产精品爱啪在线线免费观看| 亚洲成人福利在线| 拍拍拍无挡视频免费观看1000| 亚洲中文字幕无码爆乳AV| 成人免费777777被爆出| 亚洲成人精品久久| 永久免费观看黄网站| 亚洲中文字幕久久精品无码喷水 | 午夜在线免费视频| 伊伊人成亚洲综合人网7777| 无码国产精品一区二区免费3p| 亚洲成av人片在线看片| 毛片视频免费观看| 一个人免费观看视频在线中文| 久久国产精品亚洲综合| 免费电影在线观看网站| 五月天国产成人AV免费观看| 亚洲精品综合一二三区在线| 最近2019中文字幕免费看最新| 一道本在线免费视频| 91天堂素人精品系列全集亚洲| 国产无限免费观看黄网站| 四虎永久在线免费观看| 黄色免费在线网站| 亚洲无人区一区二区三区| 国产精品免费网站| jizz免费在线观看|