欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

VC6.0如何創(chuàng)建以及調(diào)用動態(tài)鏈接庫實例詳解

 更新時間:2013年01月03日 14:34:20   作者:  
作為客戶與后臺的中介,為了更好的調(diào)節(jié)兩方的關(guān)系,我明智滴選擇了webservice以及動態(tài)鏈接庫。在與客戶c++使動態(tài)鏈接庫方式,而與后臺java,使用webservice來交流溝通
小弟在公司的職責(zé),在上篇博客中已經(jīng)簡約介紹。這邊博客主要介紹技術(shù)的應(yīng)用而不在細(xì)究原理。因為公司項目著急,出結(jié)果要緊,并且咱也不是專注搞研究的,所以,基本懂了原理后,直接上手工作,搞出demo來最好。

至于公司工作情況,今天暫且略過,當(dāng)然也不是一兩句能夠表達(dá)清楚的。后面會有相應(yīng)的工作總結(jié),敬請期待……

現(xiàn)在,廢話少說,直奔主題——VC6.0中創(chuàng)建動態(tài)鏈接庫。
作為客戶與后臺的中介,為了更好的調(diào)節(jié)兩方的關(guān)系,我明智滴選擇了webservice以及動態(tài)鏈接庫。在與客戶c++使動態(tài)鏈接庫方式,而與后臺java,使用webservice來交流溝通。
既然有了動態(tài)鏈接庫,肯定大家會想到靜態(tài)鏈接庫。呵呵,這個是相對的。那這兩者有什么區(qū)別呢?那又為什么選擇了動態(tài)鏈接庫呢?
靜態(tài)鏈接庫:是把lib文件也打包到了exe文件中。
動態(tài)鏈接庫:沒有把lib文件打包到exe文件中,若是使用,則直接加載卸載相應(yīng)的dll文件。
并且,靜態(tài)鏈接庫中不允許包含靜態(tài)鏈接庫和動態(tài)鏈接庫,而動態(tài)鏈接庫中是允許包含靜態(tài)鏈接庫和動態(tài)鏈接庫的。因為小弟封裝的dll中是調(diào)用客戶的dll,并且有可能包含另外自己的動態(tài)鏈接庫。
鑒于此,小弟選擇了動態(tài)鏈接庫。
還有一點是,動態(tài)鏈接庫,也是分為三種情況的。一是非MFC的dll(也就是控制臺的dll),二是常規(guī)的MFC的dll(其中又分靜態(tài)的dl和共享的dll),三是擴(kuò)展的MFC 的dll。并且MFC的dll可以被MFC程序或者控制臺程序調(diào)用。
因為小弟封裝的dll,需要供MFC程序調(diào)用,所以選擇使用了MFC常規(guī)的dll。并且使用控制臺程序做測試。
首先,在新建工程中選擇MFC AppWizard (dll)
然后在頭.h文件中,聲明被外界調(diào)用的函數(shù)
復(fù)制代碼 代碼如下:

extern "C" _declspec(dllexport) char* queryFunctionByFID(char* funcId);

聲明后,在cpp文件中,實現(xiàn)此函數(shù)。
復(fù)制代碼 代碼如下:

char* queryFunctionByFID(char* funcId)
{
…………………………
具體的操作實現(xiàn)}

編譯,build生成。OK,在Debug下生成相應(yīng)的dll,至此動態(tài)鏈接庫生成了。然后程序就可以直接使用此dll文件了。
然后呢。把dll文件copy到相應(yīng)的測試dll程序(調(diào)用dll的程序)下。使用方式如下:
我測試dll程序中,是使用的控制臺程序,這樣簡單方便,當(dāng)然使用MFC程序也可以。
比如:我們新建一個控制臺程序,然后在main方法中,寫如下:
復(fù)制代碼 代碼如下:

//聲明函數(shù)指針 寫明函數(shù)參數(shù)個數(shù),參數(shù)類型以及返回值類型
typedef char* (* queryFunctionByFID)(char*);
//加載動態(tài)鏈接庫,返回DLL文件的句柄
HINSTANCE hDLL=NULL;
//加載動態(tài)鏈接庫,dll名稱要與剛才生成的dll名稱保持一致。
hDLL=LoadLibrary("IProcessInstIn.dll");
queryFunctionByFID saveProcess=NULL;
//加載動態(tài)鏈接庫中相應(yīng)的函數(shù)
saveProcess=(queryFunctionByFID)GetProcAddress(hDLL,"queryFunctionByFID");
//真正的調(diào)用相應(yīng)的函數(shù)
cout<<"結(jié)果是:"<<saveProcess("dd");
//調(diào)用完畢后釋放資源
FreeLibrary(hDLL);

每一句的作用,注釋已經(jīng)表達(dá)清楚。若是有不懂的,可以聯(lián)系我,互相交流一下。
其實,動態(tài)鏈接庫,類似我們VS中的dll,只不過,當(dāng)時只要把dll引用到相應(yīng)的程序,然后直接可以使用。而在此,是我們手動加載,連接,釋放dll。使用這種方式的動態(tài)鏈接庫,我們可以很隨意在我們程序中的任何地方都可以使用我們想調(diào)用的函數(shù)。
只要我們遵守了“加載,LoadLibrary——GetProcAddress——FreeLibrary”原則即可。使用相當(dāng)方便。即可解脫了兩者之間耦合的困擾,又可以加載釋放方便。
調(diào)用靜態(tài)鏈接庫的做法如下
第一:把lib文件和dll文件兩個文件全部放在客戶端下,調(diào)用動態(tài)鏈接庫時,只需要dll文件。
第二:在客戶端中需要新建頭文件,類似dll中的導(dǎo)出函數(shù)的頭文件。
第三:在客戶端調(diào)用dll文件中(cpp文件),添加預(yù)指令,也就是把lib文件顯式加載進(jìn)來。
如:#pragma comment (lib,"IProcessInstIn.dll")
第四:在button事件下,直接調(diào)用相應(yīng)的方法。
如:cout<<"結(jié)果是:"<<queryFunctionByFID(相應(yīng)的參數(shù));
總之,調(diào)用靜態(tài)鏈接庫,相對于來說,比較簡單,只要把相應(yīng)的文件加載進(jìn)來后,直接調(diào)用方法即可。但是調(diào)用動態(tài)鏈接庫相對來說,比較靈活,何時使用何時加載,不使用了直接卸載即可。
任何事物都有優(yōu)缺點,我們呢,就是充分利用他們的優(yōu)點,在不同的場合不同的需求下使用不同的方式。
剛才我們在生成dll時,使用Debug版本下的dll,既然有可以選擇Debug版本,根據(jù)我們的思維,肯定會想到,存在另外的版本。下篇博客中,我們會介紹一下Debug版本下的動態(tài)鏈接庫和另一個版本Release版本下的動態(tài)鏈接庫的區(qū)別,以及何時何地選擇何種版本。

相關(guān)文章

  • C++20 特性 協(xié)程 Coroutines(1)

    C++20 特性 協(xié)程 Coroutines(1)

    這篇文章主要給大家分享得是C++20 得特性 協(xié)程 Coroutines,下面文章內(nèi)容我們將來具體介紹什么是協(xié)程,協(xié)程得好處等知識點,需要的朋友可以參考一下
    2021-10-10
  • C++基礎(chǔ)學(xué)生管理系統(tǒng)

    C++基礎(chǔ)學(xué)生管理系統(tǒng)

    這篇文章主要介紹了C++基礎(chǔ)學(xué)生管理系統(tǒng)的相關(guān)資料,包括了文件處理代碼,鏈表處理代碼,以及自定義代碼,主函數(shù)自定義,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 關(guān)于AVLTree(C++實現(xiàn))沒有統(tǒng)一旋轉(zhuǎn)操作的問題

    關(guān)于AVLTree(C++實現(xiàn))沒有統(tǒng)一旋轉(zhuǎn)操作的問題

    這篇文章主要介紹了關(guān)于AVLTree(C++實現(xiàn))沒有統(tǒng)一旋轉(zhuǎn)操作的問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C++ Cmake的構(gòu)建靜態(tài)庫和動態(tài)庫詳解

    C++ Cmake的構(gòu)建靜態(tài)庫和動態(tài)庫詳解

    這篇文章主要為大家詳細(xì)介紹了C++ Cmake的構(gòu)建靜態(tài)庫和動態(tài)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++中constexpr與函數(shù)參數(shù)轉(zhuǎn)發(fā)的操作方法

    C++中constexpr與函數(shù)參數(shù)轉(zhuǎn)發(fā)的操作方法

    constexpr是c++11引入的關(guān)鍵字,c++11的constexpr的函數(shù)中只是支持單句代碼,c++14限制放寬,可以在里邊寫循環(huán)及邏輯判斷等語句,本文探討關(guān)于constexpr的函數(shù)中參數(shù)的現(xiàn)象,以及如果參數(shù)是constexpr如何做轉(zhuǎn)發(fā),感興趣的朋友一起看看吧
    2024-02-02
  • Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)文件編碼格式識別

    Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)文件編碼格式識別

    在做數(shù)據(jù)導(dǎo)入導(dǎo)出的過程中,如果應(yīng)用場景多了,相信各位都會遇到一個問題就是文件編碼的問題。本文將用Qt實現(xiàn)文件編碼格式識別,感興趣的可以了解一下
    2022-06-06
  • C++內(nèi)存管理詳細(xì)解析

    C++內(nèi)存管理詳細(xì)解析

    這篇文章主要給大家分享的是C++內(nèi)存管理的詳細(xì)內(nèi)容學(xué)習(xí),下面文章圍繞C++內(nèi)存管理的相關(guān)資料展開具體學(xué)習(xí)內(nèi)容,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • 用C語言實現(xiàn)鏈?zhǔn)綏=榻B

    用C語言實現(xiàn)鏈?zhǔn)綏=榻B

    大家好,本篇文章主要講的是用C語言實現(xiàn)鏈?zhǔn)綏=榻B,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 簡單談?wù)凜語言中的= 和==、!=

    簡單談?wù)凜語言中的= 和==、!=

    這篇文章主要給大家介紹了關(guān)于C語言中= 和==、!=的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • opencv利用鼠標(biāo)滑動畫出多彩的形狀

    opencv利用鼠標(biāo)滑動畫出多彩的形狀

    這篇文章主要為大家詳細(xì)介紹了opencv利用鼠標(biāo)滑動畫出多彩的形狀,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論