日韩欧美国产极速不卡一区,国产手机视频在线观看尤物,国产亚洲欧美日韩蜜芽一区,亚洲精品国产免费,亚洲二区三区无码中文,A大片亚洲AV无码一区二区三区,日韩国语国产无码123

您好,歡迎來到維庫電子市場網(wǎng) 登錄 | 免費(fèi)注冊

DLL
閱讀�9583�(shí)間:2011-04-25 11:30:13

  DLL(Dynamic Link Library )��(dòng)�(tài)鏈接�,DLL 是一�(gè)包含可由多�(gè)程序同時(shí)使用的代碼和�(shù)�(jù)的庫。它允許程序共享�(zhí)行特殊任�(wù)所必需的代碼和其他資源,一般來�,DLL是一種磁盤文�,以.dll�.DRV�.FON�.SYS和許多以.EXE為擴(kuò)展名的系�(tǒng)文件都可以是DLL。它由全局?jǐn)?shù)�(jù)、服�(wù)函數(shù)和資源組成,在運(yùn)行時(shí)被系�(tǒng)加載到調(diào)用�(jìn)程的虛擬空間�,成為調(diào)用�(jìn)程的一部分�

概述

  DLL 是一�(gè)包含可由多�(gè)程序同時(shí)使用的代碼和�(shù)�(jù)的庫。例如,� Windows 操作系統(tǒng)�,Comdlg32 DLL �(zhí)行與對話框有�(guān)的常見函�(shù)。因�,每�(gè)程序都可以使用該 DLL 中包含的功能來實(shí)�(xiàn)“打開”對話框。這有助于促�(jìn)代碼重用和內(nèi)存的有效使用�

  通過使用 DLL,程序可以實(shí)�(xiàn)模塊�,由相對�(dú)立的組件組成。例如,一�(gè)�(jì)帳程序可以按模塊來銷�??梢栽谶\(yùn)行時(shí)將各�(gè)模塊加載到主程序中(如果安裝了相�(yīng)模塊�。因?yàn)槟K是彼此獨(dú)立的,所以程序的加載速度更快,而且模塊只在相應(yīng)的功能被請求�(shí)才加��

  此外,可以更為容易地將更新應(yīng)用于各�(gè)模塊,而不�(huì)影響該程序的其他部分。例�,您可能具有一�(gè)工資�(jì)算程�,而稅率每年都�(huì)更改。當(dāng)這些更改被隔離到 DLL 中以�,您無需重新生成或安裝整�(gè)程序就可以應(yīng)用更新�

  下表說明� Windows 操作系統(tǒng)中的一些作� DLL �(shí)�(xiàn)的文件:

  ●ActiveX 控件 (.ocx) 文件

  ActiveX 控件的一�(gè)示例是日歷控件,它使您可以從日歷中選擇日��

  ●控制面� (.cpl) 文件

  .cpl 文件的一�(gè)示例是位于控制面板中的項(xiàng)。每�(gè)�(xiàng)都是一�(gè)專用 DLL�

  ●設(shè)備驅(qū)�(dòng)程序 (.drv) 文件

  �(shè)備驅(qū)�(dòng)程序的一�(gè)示例是控制打印到打印�(jī)的打印機(jī)�(qū)�(dòng)程序�

種類

  微軟的Visual C++支持三種DLL,它們分別是Non-MFC Dll(非MFC�(dòng)�(tài)庫)、Regular Dll(常�(guī)DLL)、Extension Dll(擴(kuò)展DLL��

  1、Non-MFCDLL(非MFC�(dòng)�(tài)庫)

  這種�(dòng)�(tài)鏈接庫指的是不用MFC的類庫結(jié)�(gòu),直接用C語言寫的DLL,其�(dǎo)出的函數(shù)是標(biāo)�(zhǔn)的C接口,能被非MFC或MFC編寫的應(yīng)用程序所�(diào)�。如果建立的DLL不需要使用MFC,那么應(yīng)該建立Non-MFCDLL,因?yàn)槭褂肕FC�(huì)增大用戶庫的大小,從而浪�(fèi)用戶的磁盤和�(nèi)存空��

  2、RegularDLL(常�(guī)DLL�

  這種�(dòng)�(tài)鏈接庫和下述的ExtensionDll一�,是用MFC類庫編寫�,它的一�(gè)明顯的特�(diǎn)是在源文件里有一�(gè)繼承CWinApp的類(注意:此類DLL雖然從CWinApp派生,但沒有消息循環(huán)�,被導(dǎo)出的函數(shù)是C函數(shù)、C++類或者C++成員函數(shù)(注意不要把�(shù)語C++類與MFC的微軟基�(chǔ)C++類相混淆�,調(diào)用常�(guī)DLL的應(yīng)用程序不必是MFC�(yīng)用程序,只要是能�(diào)用類C函數(shù)的應(yīng)用程序就可以,它們可以是在VisualC++、Delphi、VisualBasic、BorlandC等編譯環(huán)境下利用DLL開發(fā)�(yīng)用程�。常�(guī)DLL又可�(xì)分成靜態(tài)鏈接到MFC和動(dòng)�(tài)鏈接到MFC兩種�

 ?�?)靜�(tài)連接到MFC的動(dòng)�(tài)連接庫只被VC的般和企�(yè)版所支持。該類DLL里的輸出函數(shù)可以被任意Win32程序使用,包括使用MFC的應(yīng)用程�。輸出函�(shù)有如下形式:

  extern"C"EXPORTYourExportedFunction();

  如果沒有extern"C"修飾,輸出函�(shù)僅僅能從C++代碼中調(diào)��

 ?�?)動(dòng)�(tài)鏈接到MFC的常�(guī)DLL里的輸出函數(shù)可以被任意Win32程序使用,包括使用MFC的應(yīng)用程�。所有從DLL輸出的函�(shù)�(yīng)該以如下語句開始�

  AFX_MANAGE_STATE(AfxGetStaticModuleState())

  此語句用來正確地切換MFC模塊狀�(tài)�

  3、ExtensionDll(擴(kuò)展DLL�

  這種�(dòng)�(tài)鏈接庫是使用MFC的動(dòng)�(tài)鏈接版本所�(chuàng)建的,并且它只被用MFC類庫所編寫的應(yīng)用程序所�(diào)�。例如你已經(jīng)�(chuàng)建了一�(gè)從MFC的CtoolBar類的派生類用于創(chuàng)建一�(gè)新的工具�,為了導(dǎo)出這�(gè)類,你必須把它放到一�(gè)MFC�(kuò)展的DLL�。擴(kuò)展DLL和常�(guī)DLL不一�,它沒有一�(gè)從CWinApp繼承而來的類的對�,所�,開�(fā)人員必須在DLL中的DllMain函數(shù)添加初始化代碼和�(jié)束代�。與常規(guī)DLL相比,擴(kuò)展的DLL有如下不同點(diǎn)�

  1)它沒有一�(gè)從CWinApp派生的對��

  2)它必須有一�(gè)DLLMain函數(shù)�

  3)DLLMain�(diào)用AfxInitExtensionModule函數(shù),必須檢查該函數(shù)的返回�,如果返�0,DLLMmain也返�0;  4)如果它希望輸出CRuntimeClass類型的對象或者資�(Resources),則需要提供一�(gè)初始化函�(shù)來創(chuàng)建一�(gè)CDynLinkLibrary對象。并�,有必要把初始化函數(shù)輸出�

  5)使用�(kuò)展DLL的MFC�(yīng)用程序必須有一�(gè)從CWinApp派生的類,而且,一般在InitInstance里調(diào)用擴(kuò)展DLL的初始化函數(shù)�

�(yōu)�(diǎn)

  1、擴(kuò)展了�(yīng)用程序的特��

  2、簡化了軟件�(xiàng)目的管理�

  3、可以用許多種編程語言來編��

  4、有助于解決平臺(tái)差異�

  5、有助于資源共享�

  6、有助于�(yīng)用程序的本地��

  7、有助于節(jié)省內(nèi)��

  8、可以用于一些特殊的目的。windows使得某些特性只能為DLL所��

�(diào)�

  DLL(動(dòng)�(tài)鏈接�)的調(diào)用可以分為兩種:一種是隱式�(diào)�,一種是顯示�(diào)��

  1、隱式的�(diào)�

  這種�(diào)用方式需要把�(chǎn)生動(dòng)�(tài)連接庫時(shí)�(chǎn)生的.LIB文件加入到應(yīng)用程序的工程�,在使用DLL中的函數(shù)�(shí),只須說明一下后就可以直接通過函數(shù)名調(diào)用DLL的輸出函�(shù),調(diào)用方法和程序�(nèi)部其他的函數(shù)是一樣的。隱式調(diào)用不需要調(diào)用LoadLibrary()和FreeLibrary()。程序員在建立一�(gè)DLL文件�(shí),鏈接程序會(huì)自動(dòng)生成一�(gè)與之對應(yīng)的LIB�(dǎo)入文�。該文件包含了每一�(gè)DLL�(dǎo)出函�(shù)的符�(hào)名和可選的標(biāo)�(shí)�(hào),但是并不含有實(shí)際的代碼。LIB文件作為DLL的替代文件被編譯到應(yīng)用程序項(xiàng)目中�

  �(dāng)程序員通過隱式�(diào)用方式編譯生成應(yīng)用程序時(shí),應(yīng)用程序中的調(diào)用函�(shù)與LIB文件中導(dǎo)出符�(hào)相匹配,這些符號(hào)或標(biāo)�(shí)�(hào)被寫入到生成的EXE文件�。LIB文件中也包含了對�(yīng)的DLL文件名(但不是完全的路徑名),鏈接程序也將其存儲(chǔ)在EXE文件�(nèi)�。當(dāng)�(yīng)用程序運(yùn)行過程中需要加載DLL文件�(shí),Windows根據(jù)這些信息�(fā)�(xiàn)并加載DLL,然后通過符號(hào)名或�(biāo)�(shí)�(hào)�(shí)�(xiàn)對DLL函數(shù)的動(dòng)�(tài)鏈接。所有被�(yīng)用程序調(diào)用的DLL文件都會(huì)在應(yīng)用程序EXE文件加載�(shí)被加載在到內(nèi)存中�

  2、顯式調(diào)�

  這種�(diào)用方式是指在�(yīng)用程序中用LoadLibrary或MFC提供的AfxLoadLibrary顯式的將自己所做的�(dòng)�(tài)連接庫調(diào)�(jìn)來,并指定DLL的路徑作為參�(shù)。LoadLibary返回HINSTANCE參數(shù),應(yīng)用程序在�(diào)用GetProcAddress函數(shù)�(shí)使用這一參數(shù)。當(dāng)完成對動(dòng)�(tài)鏈接庫的�(dǎo)入以�,再使用GetProcAddress()獲取想要引入的函�(shù),該函數(shù)將符�(hào)名或�(biāo)�(shí)�(hào)�(zhuǎn)換為DLL�(nèi)部的地址,之后就可以象使用本�(yīng)用程序自定義的函�(shù)一樣來�(diào)用此引入函數(shù)�。在�(yīng)用程序退出之�,應(yīng)該用FreeLibrary或MFC提供的AfxFreeLibrary釋放�(dòng)�(tài)連接��

維庫電子通,電子知識(shí),一查百通!

已收錄詞�156249�(gè)

沾益�| 潢川�| 上蔡�| 廊坊�| 天峻�| 顺义�| 自治�| 天柱�| 射阳�| 论坛| 双桥�| 江阴�| 连云港市| 准格尔旗| 鞍山�| 绥芬河市| 黔西�| 永泰�| 余干�| 沁阳�| 浦县| 福安�| 隆子�| 鸡泽�| 苗栗�| 汉寿�| 永平�| 祁阳�| 祁门�| 紫云| 安达�| 远安�| 徐闻�| 桑日�| 铜梁�| 武平�| 修文�| 抚顺�| 济阳�| 兴义�| 济源�|