一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - VC6.0如何創建以及調用動態鏈接庫實例詳解

VC6.0如何創建以及調用動態鏈接庫實例詳解

2020-11-16 15:36C++教程網 C/C++

作為客戶與后臺的中介,為了更好的調節兩方的關系,我明智滴選擇了webservice以及動態鏈接庫。在與客戶c++使動態鏈接庫方式,而與后臺java,使用webservice來交流溝通

小弟在公司的職責,在上篇博客中已經簡約介紹。這邊博客主要介紹技術的應用而不在細究原理。因為公司項目著急,出結果要緊,并且咱也不是專注搞研究的,所以,基本懂了原理后,直接上手工作,搞出demo來最好。

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

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

復制代碼 代碼如下:


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


聲明后,在cpp文件中,實現此函數。

復制代碼 代碼如下:


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


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

復制代碼 代碼如下:


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


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

延伸 · 閱讀

精彩推薦
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
主站蜘蛛池模板: 亚洲视频中文字幕 | 久久青草免费91线频观看站街 | 秋霞717理论片在线观看 | 日本www视频在线观看 | 污黄漫| 久久午夜一区二区 | 天天狠天天天天透在线 | 亚洲国产视频一区 | 欧美成人香蕉在线观看 | 边摸边操 | 美女脱了内裤打开腿让人羞羞软件 | 亚洲成人免费 | 国产成人永久免费视 | 久久中文字幕亚洲 | 美女脱了内裤打开腿让男人图片 | 久久久无码精品亚洲A片软件 | 王晶三级作品 | 嫩草成人国产精品 | 免费午夜影院 | 99热久久这里只精品国产www | 亚洲 日韩经典 中文字幕 | 午夜国产精品影院在线观看 | 四虎影剧院 | 三级无删减高清在线影院 | 国产91精品露脸国语对白 | 母乳在线播放 | 俄罗斯毛片免费大全 | 欧美日韩国产一区二区三区欧 | 黑人粗又长 | 欧美a一片xxxx片与善交 | 出轨同学会2在线观看 | 色综合精品 | 波多野结衣中文字幕乱七八糟 | 98精品全国免费观看视频 | 我的家教老师在线观看 | 免费视频精品一区二区 | 高清在线观看mv的网址免费 | 禁忌高h| 四虎永久在线精品国产馆v视影院 | 牛牛影院成人免费网页 | 欧美精品一区二区三区免费观看 |