《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Java程序調用VC++中的DLL的研究與應用
基于Java程序調用VC++中的DLL的研究與應用
來源:微型機與應用2014年第6期
孫文華, 劉 平
(南昌工程學院 信息工程學院,江西 南昌 330099)
摘要: 隨著計算機普及率的提升以及軟件行業的飛速發展,計算機語言也越來越受到廣大計算機愛好者和計算機軟件開發人員的關注。同時越來越多的服務要求跨平臺的實現。當前比較流行的兩大語言VC++和Java幾乎可以開發所有基于B/S架構和基于C/S架構的軟件項目。它們各有所長,如果能將Java和VC有效地結合起來,實現二者的互相調用,那將可以取長補短,同時可以避免許多重復的工作,提高編程的效率。
關鍵詞: 軟件 JAVA VC DLL MFC 漢字編碼
Abstract:
Key words :

摘   要: 隨著計算機普及率的提升以及軟件行業的飛速發展,計算機語言也越來越受到廣大計算機愛好者和計算機軟件開發人員的關注。同時越來越多的服務要求跨平臺的實現。當前比較流行的兩大語言VC++和Java幾乎可以開發所有基于B/S架構和基于C/S架構的軟件項目。它們各有所長,如果能將Java和VC有效地結合起來,實現二者的互相調用,那將可以取長補短,同時可以避免許多重復的工作,提高編程的效率。
關鍵詞: Java; VC; DLL; MFC; 漢字編碼

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

    動態鏈接庫DLL好比一個封裝起來的“倉庫”,DLL是Dynamic Link Library的縮寫,其中封裝了一些或者部分可以被共享的例程和資源,采用動態的連接方式就能夠被其他程序動態裝載、運行以完成某些特定的功能。
    采用動態鏈接庫進行軟件開發,具體優勢主要有下面幾點:
 (1)對硬件資源方面的要求比較小
 在程序開發過程中,經常遇到多個程序調用同一個函數庫的情況,這時如果使用動態鏈接庫,就可以大大減少在磁盤和物理內存中重復代碼的加載。只有當生成的EXE 文件確實要調用該DLL模塊時,系統才會將其加載到內存空間中去。
 (2)項目體系結構模塊化開發
    程序結構模塊化對項目開發有著重要的作用,能夠方便項目的管理與功能的定制。動態鏈接庫的設計包含這種思想。另外,動態鏈接庫支持多語言。這樣可以有更廣闊的應用平臺,方便開發程序的移植,也可以在不同的開發平臺上調用。通常當開發的系統為龐大系統,避免不了有許多重復類型的功能,這時如果將這些類似的功能單獨做成DLL,將可以大大減少開發的工作量和提高開發的速度[2]。
    (3)軟件維護方便
    當動態鏈接庫中的函數需要更新或修復時,采用動態鏈接庫更方便。因為部署及安裝動態鏈接庫在此就不要求重新建立程序與該DLL 的連接。此外,如果多個程序使用同一個DLL,則多個程序都將從該更新或修復中獲益。當使用定期更新或修復的第三方DLL 時,此問題可能會更頻繁地出現,升級到DLL 就可以更容易解決這些問題。
 (4)功能實現的細節隱藏
    考慮到一些重要技術的保密和知識產權的保護,在某些情況下,通常將項目中一些功能實現的具體細節隱藏起來,即希望里面的部分代碼不被公開,這時動態鏈接庫就是一項非常不錯的實現方法。動態鏈接庫可以被其他應用程序訪問調用,但將代碼的具體細節完全隱藏起來。另外,DLL的語言無關性也是很重要的一個方面。正是由于動態鏈接庫DLL與語言無關的這個特點,故用VC++創建的DLL可以被其他任何支持動態鏈接庫的編程語言調用, 比如VB、Delphi、PD[3]等。
1.2 Java本地編程接口JNI
    JNI(Java Native Interfacejava)其實就是指Java本地程序接口,屬于JDK中的一部分。當Java程序中有需要調用通過VC++語言編寫的DLL時,此時最佳選擇就是使用JNI技術。通過使用Java本地接口書寫程序,可以確保代碼在不同的開發平臺上方便移植。JNI使得運行于Java虛擬機的代碼可以操作用C、C++或者匯編等書寫的應用程序或庫,同時也可以通過調用相應的接口函數將Java虛擬機內嵌到本地應用程序中。
    特別需要提醒的是,只要有下面幾種情況中的任何一種出現時,程序員就需要利用JNI來進行處理:(1)所開發的應用程序要使用到與平臺相關的屬性, 但Java標準類庫不支持對這些屬性的處理; (2)已經擁有了利用其他編程語言實現的應用程序或庫,希望用Java 直接調用這些應用程序或庫來實現; (3)程序中的某個模塊對運行的時間效率要求很高,此時希望用比較低級的語言(如匯編)來實現,同時希望在Java應用程序中使用這個模塊[4]。
2 設計與實現
2.1 設計步驟

    使用JNI在Java中調用VC++寫的DLL有以下幾個步驟:(1)創建Java類;(2)編譯Java代碼并生成頭文件;(3)開發DLL并實現方法;(4)編譯動態鏈接庫;(5)測試運行程序。
2.2 設計實例
2.2.1 無包情況

    (1)在Java中寫調用VC的代碼,具體如下:
    public class JieCheng{
        static{
        System.loadLibrary("JieCheng");
           //注意:不寫擴展名,名字要與DLL的文件名一致
     }
    public native static int jiecheng(int n); //聲明native方法
    public static void main(String args[]){
    int s;
    JieCheng jc=new JieCheng();
    s=jc.jiecheng(5);
    System.out.println(s);                            //聲明main法
    }
    }
    (2)在運行彈出的輸入框中輸入cmd進入dos界面,通過cd命令進入到安裝Java的路徑下面的bin中,假設安裝目錄是D:\Program Files\Java\jdk1.6.0_10\bin,把JieCheng.java文件移到D:\Program Files\Java\jdk1.6.0_10
\bin目錄下,輸入javac JieCheng.java,可以看到在該目錄下生成了JieCheng.class的文件。輸入javah JieCheng生成了JieCheng.h文件。具體如下:
    #include <jni.h>
    /* Header for class JieCheng */
    #ifndef _Included_JieCheng
    #define _Included_JieCheng
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     JieCheng
     * Method:    jiecheng
     * Signature: (I)I
    */
    JNIEXPORT jint JNICALL Java_JieCheng_jiecheng
          (JNIEnv *, jclass, jint);
    #ifdef __cplusplus
    }
    #endif
    #endif
    (3)在VC下創建DLL文件,名字一定要是System.loadLibrary("JieCheng")中的JieCheng,把JieCheng.h文件直接復制到該VC文件下,同時把jni.h,jni_md.h復制到VC工程下。在JieCheng.cpp文件下實現在Java中聲明過的方法,注意方法名一定要與JieCheng.h中聲明的方法一致,在方法中寫入代碼如下:
    #include"JieCheng.h"
    JNIEXPORT jint JNICALL Java_JieCheng_jiecheng(JNIEnv *,    jclass, jint n)
    {
    int i,s;
    s=1;
    for(i=1;i<=n;i++){
        s=s*i;}
    return s;
    }
    (4)在VC下編譯生成JieCheng.dll文件,把該文件直接復制到Java的安裝目錄下面的bin目錄下:D:\Program Files\Java\jdk1.6.0_10\bin。
    (5)把在VC下編譯生成的JieCheng.dll文件直接復制到Java的安裝目錄的bin目錄下:D:\Program Files\Java\jdk1.6.0_10\bin。運行命令:java JieCheng,本例中,JieCheng函數用于求一個數的階乘,所以在屏幕上顯示的結果是“120”。
2.2.2 有包情況

 


    有包的情況與上面介紹的無包情況大致相同。但需要特別強調、引起注意的地方是:首先需要在Java的安裝目錄bin下創建包名文件夾,假設創建的包名文件夾的名稱為NegerVector,然后把.java文件放在此文件夾中。接下來就是進入DOS環境下運行兩個命令,首先運行:javac NegerVector\ JieCheng.java;然后運行:javah  Neger Vector.JieCheng。其他的可以參照無包情況了,因為接下來與無包的情況基本相同。
    在許多大型項目的開發過程中,從提高開發效率以及實現代碼重用的角度來看,跨平臺服務的開發是未來的發展趨勢,從而經常需要在Java程序中調用VC中的DLL。本文從JNI技術出發,通過簡單的實例詳細闡述了JNI調用VC++寫的DLL的程序,解決了Java與VC的有效結合,實現了它們之間的相互調用。
參考文獻
[1] 王志文,夏秦,李平均.Java程序設計(修訂本)[M].西安:西安交通大學出版社,2005.
[2] 孫文華.一種基于Java編程的臟字過濾器的設計[J].微型機與應用,2012,31(9):18-19,23.
[3] 王敏,邵定宏,陸金桂.動態鏈接庫技術及其應用實[J].微計算機信息,2006,22(27):272-274.
[4] 宋曉字,王永會. Visual C++高級編程技術與實例[M].北京:中國水利水電出版社,2006.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久www免费人成看片高清| 欧美日韩在线视频一区二区| 伊人久久大香线蕉综合热线| 亚洲第一主播视频| 欧美在线视频a| 国产精品美女久久久| 亚洲一区美女视频在线观看免费| 久久免费精品日本久久中文字幕| 亚洲精品日韩综合观看成人91| 欧美激情久久久久久| 一区二区三区日韩欧美精品| 亚洲成色最大综合在线| 亚洲国产高清一区| 欧美一级片久久久久久久| 欧美日韩综合一区| 国产伦精品一区二区三区视频孕妇| 在线中文字幕一区| 欧美一区二区三区免费观看| 好吊色欧美一区二区三区四区| 国产精品盗摄久久久| 欧美伦理a级免费电影| 日韩午夜av在线| 国产精品毛片a∨一区二区三区|国| 另类春色校园亚洲| 亚洲一区二区三区精品在线观看| 精品9999| 国产精品一区二区久久| 久久久亚洲综合| 亚洲伊人一本大道中文字幕| 亚洲精品美女在线观看播放| 亚洲欧美视频在线| 国产亚洲欧美另类一区二区三区| 欧美视频日韩视频在线观看| 欧美成人综合| 亚欧美中日韩视频| 久久美女艺术照精彩视频福利播放| 久热精品视频在线观看一区| 亚洲精品网站在线播放gif| 在线亚洲国产精品网站| 亚洲一区二区三区色| 久久手机免费观看| 久久国产精品99国产| 亚洲一区二区不卡免费| 欧美一区二区三区播放老司机| 亚洲成色777777在线观看影院| 亚洲欧美日韩中文在线制服| 一区一区视频| 一本久久综合亚洲鲁鲁| 99精品国产福利在线观看免费| 亚洲国产一区二区a毛片| 国产精品欧美一区喷水| 亚洲国产精品电影| 一区国产精品| 国产在线播放一区二区三区| 一本综合久久| 久久久噜噜噜久久中文字幕色伊伊| 欧美视频三区在线播放| 激情五月婷婷综合| 亚洲电影网站| 欧美在线观看视频在线| 一区二区三区我不卡| 久热re这里精品视频在线6| 欧美精品色综合| 在线精品国产成人综合| 夜夜爽夜夜爽精品视频| 国语自产偷拍精品视频偷| 亚洲一区二区三区在线视频| 在线免费观看日本欧美| 美女尤物久久精品| 国产深夜精品福利| 欧美国产一区在线| 欧美色图首页| 美女国产精品| 国产精品色网| 亚洲大片精品永久免费| 牛牛影视久久网| 午夜欧美视频| 欧美激情一区二区三区| 欧美在线综合视频| 99精品视频免费| 亚洲美女在线观看| 亚洲视频一区二区| 亚洲福利免费| 91久久一区二区| 久久精品国产99| 国产精品免费观看视频| 1024成人网色www| 欧美怡红院视频一区二区三区| 亚洲国产日韩一级| 91久久久精品| 91久久精品日日躁夜夜躁欧美| 久久精品电影| 亚洲精品永久免费精品| 午夜精品国产精品大乳美女| 伊人男人综合视频网| 欧美日韩在线高清| 亚洲高清资源综合久久精品| 国产在线麻豆精品观看| 激情六月婷婷综合| 欧美成人免费网| 国产精品影院在线观看| 国产亚洲精品7777| 正在播放日韩| 久久gogo国模裸体人体| 欧美一级大片在线免费观看| 亚洲精品一线二线三线无人区| 欧美中在线观看| 亚洲人成毛片在线播放| 国产精品乱码一区二三区小蝌蚪| 欧美风情在线| 小嫩嫩精品导航| 国产真实乱偷精品视频免| 久久人人97超碰人人澡爱香蕉| 欧美色播在线播放| 欧美在线观看视频一区二区| 亚洲国产精品久久91精品| 美女黄毛**国产精品啪啪| 亚洲在线成人精品| 久久久久久一区| 亚洲欧洲精品成人久久奇米网| 久久久精品免费视频| 亚洲一区中文| 亚洲欧洲日本专区| 国产精品视频久久久| 一区二区免费看| 亚洲国产精品视频| 国产精品中文字幕在线观看| 免费一区二区三区| 久久久九九九九| 欧美午夜精品久久久久久久| 欧美小视频在线观看| 欧美激情一区二区三区全黄| 国产九九视频一区二区三区| 香蕉成人久久| 欧美日本亚洲| 久久精品国产免费| 另类酷文…触手系列精品集v1小说| 久久久久久久综合日本| 欧美日韩免费一区二区三区| 亚洲黄一区二区| 国产日产欧产精品推荐色| 国产精品一区二区a| 亚洲高清精品中出| 久久一区二区三区四区五区| 亚洲午夜激情| 欧美福利一区二区三区| 欧美精品亚洲二区| 国产乱码精品一区二区三区五月婷| 在线免费观看欧美| 尤物99国产成人精品视频| 亚洲欧美国产va在线影院| 国内精品久久久久久久影视麻豆| 国产精品揄拍500视频| 国产情侣一区| 亚洲精品一区二区三区在线观看| 国产精品一级二级三级| 亚洲精品一区在线观看香蕉| 另类酷文…触手系列精品集v1小说| 黄色综合网站| 亚洲美女视频在线观看| 精久久久久久久久久久| 亚洲在线观看免费| 国产精品你懂的在线| 欧美日韩成人| 午夜精品久久久久久久久久久| 亚洲影院一区| 久久久久久精| 午夜国产精品视频免费体验区| 国产一区二区看久久| 欧美日韩国产成人在线观看| 久久精品毛片| 亚洲精品一区在线观看| 亚洲欧美综合国产精品一区| 国产精品免费看久久久香蕉| 久久精品女人天堂| 国产精品一区二区女厕厕| 亚洲国产午夜| 久久成人免费网| 最近中文字幕日韩精品| 亚洲日本黄色| 牛人盗摄一区二区三区视频| 国产噜噜噜噜噜久久久久久久久| 久久欧美中文字幕| 久久久噜噜噜久久| 久久久精品日韩欧美| 国内精品久久久久久影视8| 亚洲影院在线| 欧美视频精品一区| 在线视频日本亚洲性| 欧美激情精品久久久久久大尺度| 欧美成人午夜剧场免费观看| 一本大道av伊人久久综合| 久久精品综合一区| 亚洲国产精品成人精品| 亚洲一区中文字幕在线观看| 亚洲国产一区二区视频| 亚洲欧洲免费视频| 欧美一区二区三区另类| 最新国产の精品合集bt伙计| 性xx色xx综合久久久xx| 欧美岛国在线观看| 亚洲精品免费看| 亚洲人www| 国产日韩欧美中文在线播放| 久久精品国产精品亚洲综合| 亚洲国产老妈| 久久视频一区| 亚洲免费在线视频一区 二区| 国产亚洲精品高潮| 欧美午夜在线观看| 亚洲免费在线看| 一区二区三区欧美亚洲| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲男人第一av网站| 久久高清免费观看| 亚洲一区二区欧美| 午夜视频在线观看一区| 国产精品视频久久久| 亚洲高清久久网| 国产精品日韩欧美一区二区三区| 香蕉成人伊视频在线观看| 亚洲国产中文字幕在线观看| 亚洲在线日韩| 久久躁日日躁aaaaxxxx| 欧美一区二区三区免费观看| 亚洲一区日本| 亚洲精品中文字幕女同| 欧美在线视屏| 欧美高清在线一区二区| 最新中文字幕一区二区三区| 国产日韩视频| 国产一区二区三区丝袜| 国产专区欧美精品| 久久亚洲春色中文字幕久久久| av72成人在线| 亚洲少妇一区| 曰韩精品一区二区| 亚洲色在线视频| 欧美国产日韩亚洲一区| 欧美经典一区二区| 亚洲伦理在线观看| 亚洲福利视频专区| 欧美成人午夜激情视频| 欧美日韩mp4| 欧美成人精品激情在线观看| 香蕉国产精品偷在线观看不卡| 亚洲福利视频一区二区| 国产精品狼人久久影院观看方式| 亚洲电影自拍| 亚洲大片精品永久免费| 亚洲韩国青草视频| 久久综合五月天婷婷伊人| 精品成人免费| av不卡在线看| 久久精品国产v日韩v亚洲| 国产精品高潮呻吟久久| 欧美一级黄色网| 国产精品久久久久毛片大屁完整版| 黄色亚洲网站| 久久一日本道色综合久久| 亚洲天堂男人| 久久综合九色综合网站| 欧美久久在线| 欧美日韩成人在线| 欧美三日本三级少妇三2023| 一区二区在线观看视频在线观看| 国产美女精品一区二区三区| 香蕉乱码成人久久天堂爱免费| 亚洲一区二区三区精品在线| 国产欧美一区二区三区视频| 国产精品揄拍一区二区| 一区二区亚洲欧洲国产日韩| 亚洲国产精品999| 亚洲男人的天堂在线aⅴ视频| 亚洲性视频网站| 一区三区视频| 欧美三级午夜理伦三级中视频| 欧美性猛交xxxx乱大交退制版| 国产欧美韩国高清| 国产精品大片免费观看| 在线成人激情黄色| 樱桃成人精品视频在线播放| 亚洲美洲欧洲综合国产一区| 久久久久一本一区二区青青蜜月| 国产欧美亚洲精品| 午夜精品电影| 欧美在线一级va免费观看| 99精品国产高清一区二区| 亚洲黑丝在线| 在线观看视频一区| 一本一本a久久| 亚洲三级色网| 午夜精品一区二区三区在线视| 牛夜精品久久久久久久99黑人| 久久久久久久久久久久久9999| 久久精品一二三区| 亚洲一区亚洲二区| 国产精品入口日韩视频大尺度| 国产精品美女久久久久久2018| 亚洲国产另类久久久精品极度| 亚洲国产精品一区在线观看不卡| 亚洲精品一品区二品区三品区| 久久久久久久久久码影片| 欧美 日韩 国产一区二区在线视频| 亚洲欧美文学| 亚洲大片av| 国产综合久久| 伊人男人综合视频网| 99re亚洲国产精品| 亚洲一区二区三区777| 久久精品天堂| 韩日欧美一区| 亚洲综合日韩中文字幕v在线| 欧美色视频日本高清在线观看| 亚洲欧美久久| 免费av成人在线| 免费观看成人网| 欧美日韩在线播放三区| 欧美风情在线观看| 亚洲毛片一区| 国产精品国产三级国产aⅴ9色| 91久久精品国产91性色tv| 一本大道久久a久久综合婷婷| 蜜臀va亚洲va欧美va天堂| 久久亚洲国产成人| 亚洲午夜在线观看| 欧美亚洲视频| 欧美精品在线播放|