<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 林俊海 閱讀(956) 評論(0)  編輯  收藏 所屬分類: JAVA天地
    主站蜘蛛池模板: 午夜视频在线观看免费完整版| 亚洲黄片手机免费观看| 亚洲性色精品一区二区在线| 国产一区二区三区免费视频| 9久热这里只有精品免费| 99ri精品国产亚洲| 午夜精品在线免费观看| 狠狠躁狠狠爱免费视频无码 | 亚洲福利电影在线观看| 日韩高清免费观看| 999zyz**站免费毛片| 亚洲人成777在线播放| 亚洲精品无码激情AV| 99在线观看免费视频| 色吊丝免费观看网站| 亚洲国产人成网站在线电影动漫| 在线免费一区二区| 野花香高清在线观看视频播放免费| 国产午夜亚洲精品| 亚洲妇熟XXXX妇色黄| 白白国产永久免费视频| 久热免费在线视频| 香港经典a毛片免费观看看| 亚洲精品mv在线观看| 亚洲片国产一区一级在线观看| 免费下载成人电影| 巨胸喷奶水www永久免费| 亚洲另类无码专区丝袜| 亚洲爆乳无码专区| 又粗又大又硬又爽的免费视频| 999国内精品永久免费视频| 久久久精品国产亚洲成人满18免费网站 | 亚洲精品无码乱码成人| 性做久久久久免费观看| 3d成人免费动漫在线观看| www免费插插视频| 国产精品亚洲专区无码WEB| 久久精品国产亚洲AV忘忧草18| 亚洲AV无码一区二区二三区软件| 免费成人黄色大片| 性色av免费观看|