亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java程序調(diào)用VC++中的DLL的研究與應(yīng)用*

        2014-07-25 07:44:02孫文華
        關(guān)鍵詞:程序語言

        孫文華,劉 平

        (南昌工程學(xué)院 信息工程學(xué)院,江西 南昌 330099)

        雖然Java和VC++是當前兩大主流的編程語言,但是如果兩者之間不能有效結(jié)合,實現(xiàn)相互調(diào)用的話,勢必會給編程人員的工作帶來諸多不便,增加許多的重復(fù)工作,甚至有可能造成整個項目的擱淺。另外,不同語言之間的互相調(diào)用還可以有效地利用現(xiàn)有程序,并且不需要一遍一遍地撰寫類似的程序代碼。為此,本文引人了VC++中的動態(tài)鏈接庫文件,通過實例闡述了如何在Java中成功調(diào)用VC++動態(tài)鏈接庫的問題[1]。

        1 技術(shù)介紹

        1.1 動態(tài)鏈接庫DLL

        動態(tài)鏈接庫DLL好比一個封裝起來的 “倉庫”,DLL是Dynamic Link Library的縮寫,其中封裝了一些或者部分可以被共享的例程和資源,采用動態(tài)的連接方式就能夠被其他程序動態(tài)裝載、運行以完成某些特定的功能。

        采用動態(tài)鏈接庫進行軟件開發(fā),具體優(yōu)勢主要有下面幾點:

        (1)對硬件資源方面的要求比較小

        在程序開發(fā)過程中,經(jīng)常遇到多個程序調(diào)用同一個函數(shù)庫的情況,這時如果使用動態(tài)鏈接庫,就可以大大減少在磁盤和物理內(nèi)存中重復(fù)代碼的加載。只有當生成的EXE文件確實要調(diào)用該DLL模塊時,系統(tǒng)才會將其加載到內(nèi)存空間中去。

        (2)項目體系結(jié)構(gòu)模塊化開發(fā)

        程序結(jié)構(gòu)模塊化對項目開發(fā)有著重要的作用,能夠方便項目的管理與功能的定制。動態(tài)鏈接庫的設(shè)計包含這種思想。另外,動態(tài)鏈接庫支持多語言。這樣可以有更廣闊的應(yīng)用平臺,方便開發(fā)程序的移植,也可以在不同的開發(fā)平臺上調(diào)用。通常當開發(fā)的系統(tǒng)為龐大系統(tǒng),避免不了有許多重復(fù)類型的功能,這時如果將這些類似的功能單獨做成DLL,將可以大大減少開發(fā)的工作量和提高開發(fā)的速度[2]。

        (3)軟件維護方便

        當動態(tài)鏈接庫中的函數(shù)需要更新或修復(fù)時,采用動態(tài)鏈接庫更方便。因為部署及安裝動態(tài)鏈接庫在此就不要求重新建立程序與該DLL的連接。此外,如果多個程序使用同一個DLL,則多個程序都將從該更新或修復(fù)中獲益。當使用定期更新或修復(fù)的第三方DLL時,此問題可能會更頻繁地出現(xiàn),升級到DLL就可以更容易解決這些問題。

        (4)功能實現(xiàn)的細節(jié)隱藏

        考慮到一些重要技術(shù)的保密和知識產(chǎn)權(quán)的保護,在某些情況下,通常將項目中一些功能實現(xiàn)的具體細節(jié)隱藏起來,即希望里面的部分代碼不被公開,這時動態(tài)鏈接庫就是一項非常不錯的實現(xiàn)方法。動態(tài)鏈接庫可以被其他應(yīng)用程序訪問調(diào)用,但將代碼的具體細節(jié)完全隱藏起來。另外,DLL的語言無關(guān)性也是很重要的一個方面。正是由于動態(tài)鏈接庫DLL與語言無關(guān)的這個特點,故用VC++創(chuàng)建的DLL可以被其他任何支持動態(tài)鏈接庫的編程語言調(diào)用,比如 VB、Delphi、PD[3]等。

        1.2 Java本地編程接口JNI

        JNI(Java Native Interfacejava)其實就是指 Java本地程序接口,屬于JDK中的一部分。當Java程序中有需要調(diào)用通過VC++語言編寫的DLL時,此時最佳選擇就是使用JNI技術(shù)。通過使用Java本地接口書寫程序,可以確保代碼在不同的開發(fā)平臺上方便移植。JNI使得運行于Java虛擬機的代碼可以操作用C、C++或者匯編等書寫的應(yīng)用程序或庫,同時也可以通過調(diào)用相應(yīng)的接口函數(shù)將Java虛擬機內(nèi)嵌到本地應(yīng)用程序中。

        特別需要提醒的是,只要有下面幾種情況中的任何一種出現(xiàn)時,程序員就需要利用JNI來進行處理:(1)所開發(fā)的應(yīng)用程序要使用到與平臺相關(guān)的屬性,但Java標準類庫不支持對這些屬性的處理;(2)已經(jīng)擁有了利用其他編程語言實現(xiàn)的應(yīng)用程序或庫,希望用Java直接調(diào)用這些應(yīng)用程序或庫來實現(xiàn);(3)程序中的某個模塊對運行的時間效率要求很高,此時希望用比較低級的語言(如匯編)來實現(xiàn),同時希望在Java應(yīng)用程序中使用這個模塊[4]。

        2 設(shè)計與實現(xiàn)

        2.1 設(shè)計步驟

        使用JNI在Java中調(diào)用VC++寫的 DLL有以下幾個步驟:(1)創(chuàng)建 Java類;(2)編譯 Java代碼并生成頭文件;(3)開發(fā) DLL并實現(xiàn)方法;(4)編譯動態(tài)鏈接庫;(5)測試運行程序。

        2.2 設(shè)計實例

        2.2.1 無包情況

        (1)在Java中寫調(diào)用VC的代碼,具體如下:

        (2)在運行彈出的輸入框中輸入cmd進入dos界面,通過cd命令進入到安裝Java的路徑下面的bin中,假設(shè)安裝目錄是 D:Program FilesJavajdk1.6.0_10in,把JieCheng.java文件移到 D:Program FilesJavajdk1.6.0_10in目錄下,輸入 javac JieCheng.java,可以看到在該目錄下生成了JieCheng.class的文件。輸入javah JieCheng生成了JieCheng.h文件。具體如下:

        (3)在VC下創(chuàng)建DLL文件,名字一定要是System.load-Library("JieCheng")中的 JieCheng,把 JieCheng.h文件直接復(fù)制到該VC文件下,同時把jni.h,jni_md.h復(fù)制到VC工程下。在JieCheng.cpp文件下實現(xiàn)在Java中聲明過的方法,注意方法名一定要與JieCheng.h中聲明的方法一致,在方法中寫入代碼如下:

        (4)在VC下編譯生成 JieCheng.dll文件,把該文件直接復(fù)制到 Java的安裝目錄下面的 bin目錄下:D:Program FilesJavajdk1.6.0_10in。

        (5)把在VC下編譯生成的JieCheng.dll文件直接復(fù)制到 Java的安裝目錄的 bin目錄下:D:Program FilesJavajdk1.6.0_10in。運行命令:java JieCheng,本例中,JieCheng函數(shù)用于求一個數(shù)的階乘,所以在屏幕上顯示的結(jié)果是“120”。

        2.2.2 有包情況

        有包的情況與上面介紹的無包情況大致相同。但需要特別強調(diào)、引起注意的地方是:首先需要在Java的安裝目錄bin下創(chuàng)建包名文件夾,假設(shè)創(chuàng)建的包名文件夾的名稱為NegerVector,然后把.java文件放在此文件夾中。接下來就是進入DOS環(huán)境下運行兩個命令,首先運行:javac NegerVectorJieCheng.java; 然后運行:javah Neger Vector.JieCheng。其他的可以參照無包情況了,因為接下來與無包的情況基本相同。

        在許多大型項目的開發(fā)過程中,從提高開發(fā)效率以及實現(xiàn)代碼重用的角度來看,跨平臺服務(wù)的開發(fā)是未來的發(fā)展趨勢,從而經(jīng)常需要在Java程序中調(diào)用VC中的DLL。本文從JNI技術(shù)出發(fā),通過簡單的實例詳細闡述了JNI調(diào)用VC++寫的DLL的程序,解決了Java與VC的有效結(jié)合,實現(xiàn)了它們之間的相互調(diào)用。

        [1]王志文,夏秦,李平均.Java程序設(shè)計(修訂本)[M].西安:西安交通大學(xué)出版社,2005.

        [2]孫文華.一種基于Java編程的臟字過濾器的設(shè)計[J].微型機與應(yīng)用,2012,31(9):18-19,23.

        [3]王敏,邵定宏,陸金桂.動態(tài)鏈接庫技術(shù)及其應(yīng)用實[J].微計算機信息,2006,22(27):272-274.

        [4]宋曉字,王永會.Visual C++高級編程技術(shù)與實例[M].北京:中國水利水電出版社,2006.

        猜你喜歡
        程序語言
        語言是刀
        文苑(2020年4期)2020-05-30 12:35:30
        試論我國未決羈押程序的立法完善
        讓語言描寫搖曳多姿
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        多向度交往對語言磨蝕的補正之道
        英國與歐盟正式啟動“離婚”程序程序
        累積動態(tài)分析下的同聲傳譯語言壓縮
        創(chuàng)衛(wèi)暗訪程序有待改進
        我有我語言
        人妻熟妇乱又伦精品视频| 免费人成视频网站在线观看不卡| 久久国产女同一区二区| 国内自拍愉拍免费观看| 亚洲精品乱码8久久久久久日本| 精品国产黑色丝袜高跟鞋| 尤物yw午夜国产精品视频| 亚洲国产一区二区av| 欧洲熟妇色xxxx欧美老妇软件| 丰满少妇高潮惨叫正在播放| 无码一区二区三区不卡AV| 精品国产亚洲av久一区二区三区| 免费观看国产短视频的方法| 欧美极品色午夜在线视频| 91久久国产精品视频| 亚洲影院在线观看av| 国产精品女直播一区二区| 97久久精品无码一区二区天美| 国产成人无码精品久久99| 日韩中文字幕一区二十| 亚洲欧洲免费无码| 人妻在线日韩免费视频| 国产欧美日韩图片一区二区| 亚洲第一女优在线观看| 中文精品久久久久人妻不卡| 999久久久免费精品国产| 欧美一级视频在线| 日韩人妻久久中文字幕| 少妇高潮一区二区三区99| 精品人无码一区二区三区 | 亚洲狠狠婷婷综合久久| 无码人妻丰满熟妇区免费| 性生大片免费观看性少妇| 一本色道久久88精品综合| 亚州精品无码人妻久久| 在线亚洲精品免费视频| 狠狠色噜噜狠狠狠777米奇| 九九99无码精品视频在线观看| 亚洲精品美女久久久久网站| 亚洲精品有码日本久久久| 男人激烈吮乳吃奶视频免费|