<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)

    相冊

    相關鏈接


    林俊海的博客

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

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

    好的,我們先來創建一個類:

    package alvinJNI;

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

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

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

    }

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

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

    接下來我們編寫 Delphi 代碼:

    library DelphiAction;  //這里設置動態鏈接庫的名稱,因為我們剛才寫 JAVA 類時是用 DelphiAction,所以這里了要設置為 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 里面聲明,才能使用.

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

    exports
            Java_alvinJNI_HelloWorld_printText; //為函數做引出聲明,這樣才能真正的被調用到

    end.

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

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

    posted on 2006-11-14 05:10 林俊海 閱讀(957) 評論(0)  編輯  收藏 所屬分類: JAVA天地
    主站蜘蛛池模板: 亚洲欧美国产国产综合一区| 亚洲欧洲日产v特级毛片| 国产亚洲欧美日韩亚洲中文色| 免费国产黄网站在线观看 | 特级毛片A级毛片免费播放| 最近最好的中文字幕2019免费| 亚洲天堂一区在线| 100000免费啪啪18免进| 亚洲最大的黄色网| 日韩成人免费aa在线看| 直接进入免费看黄的网站| 免费国产怡红院在线观看| 亚洲色偷偷色噜噜狠狠99| 免费国产人做人视频在线观看| 日本亚洲中午字幕乱码| 亚洲情a成黄在线观看| 国产高潮流白浆喷水免费A片 | 亚洲无av在线中文字幕| 无码人妻AV免费一区二区三区| 亚洲精品第一国产综合精品| 国产va精品免费观看| 亚洲第一se情网站| 亚洲综合网站色欲色欲| 无码精品一区二区三区免费视频| 亚洲最大视频网站| 嫩草视频在线免费观看| 一级人做人a爰免费视频| 久久久久亚洲av无码专区导航| 91香蕉视频免费| 免费VA在线观看无码| 亚洲欧洲日产国码av系列天堂| 99re视频精品全部免费| 亚洲国产成人精品无码区花野真一| 亚洲AⅤ优女AV综合久久久| 日本视频免费高清一本18| 亚洲成a人片在线观看精品| 亚洲av无码不卡私人影院| 少妇无码一区二区三区免费| 亚洲人成网站在线在线观看| 国产成人综合亚洲亚洲国产第一页| 8x8×在线永久免费视频|