如果DLL是COM組件的話,一定要注冊(cè);如果是一般的DLL,不用注冊(cè)。注冊(cè)COM時(shí),在注冊(cè)表 HKEY_CLASS_ROOT\CLSID\中會(huì)保存有關(guān)信息,如DLL的路徑,住所模式等。所以CoCreateInstance()可以找到DLL,這也是為什么將該dll移到他處必須重新注冊(cè)的原因。DLL有兩種調(diào)用方法:
1.用LoadLiabrary調(diào)用,不用注冊(cè)。
2.用CoCreateInstance,通過CLSID,必須注冊(cè),目錄沒關(guān)系,只是移動(dòng)位子以后,必須重新注。
【什么是Com?】
COM的全稱是組件對(duì)象模型(Component Object Model)。Com是一種規(guī)范,提供了二進(jìn)制一級(jí)的跨語言能力。
【什么是Com組件?】
顧名思義就是指實(shí)現(xiàn)了com規(guī)范的組件
,他分為進(jìn)程內(nèi)組件、進(jìn)程外組件和分布式組件(DCOM),進(jìn)程內(nèi)組件一般是使用DLL技術(shù)封裝的(ocx也是一種特殊 的COM組件),進(jìn)程外組件和分布式組件一般都是使用exe封裝。dll和調(diào)用者同一個(gè)進(jìn)程,dll如果crash,會(huì)使調(diào)用者也crash;exe和調(diào)用者不在同一個(gè)進(jìn)程,他crash不會(huì)使調(diào)用者crash。dll性能好,因?yàn)樵谕粋€(gè)進(jìn)程,不用列集。
【什么是DLL?】
DLL文件即動(dòng)態(tài)鏈接庫文件,是一種可執(zhí)行文件,它允許程序共享執(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 之間沒有沖突,該文件通常映射到進(jìn)程虛擬空間的同一地址上。DLL 模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL 可以有自己的數(shù)據(jù)段,但沒有自己的堆棧,使用與調(diào)用它的應(yīng)用程序相同的堆棧模式;DLL 在內(nèi)存中只有一個(gè)實(shí)例;DLL 實(shí)現(xiàn)了代碼封裝性;DLL 的編制與具體的編程語言及編譯器無關(guān)。微軟的Visual C++支持三種DLL,它們分別是Non-MFC Dll(非MFC動(dòng)態(tài)庫)、Regular Dll(常規(guī)DLL)、Extension Dll(擴(kuò)展DLL)。
下表說明了 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)程序。 |
【OCX和DLL的區(qū)別】
ocx為后綴名的ActiveX控件是一種比較特殊的DLL
,它的基礎(chǔ)是OLE和COM,是有交互界面的可視化控,定義了控件的屬性和方法,定義控件可引發(fā)的事件的響應(yīng)。我們通常說的.DLL為后綴名的文件是一個(gè)包含函數(shù)和數(shù)據(jù)的模塊集合,可以被其它應(yīng)用程序共享的程序模塊。
【OLE、ActveX、COM 發(fā)展過程】 都是微軟的一些技術(shù)標(biāo)準(zhǔn)。Ole比較老后來發(fā)展成Activex,再后來發(fā)展成為COM。ocx/dll是擴(kuò)展名。Activex有兩種擴(kuò)展名ocx和dll。實(shí)際上你可以把它們的擴(kuò)暫名字調(diào),COM作為ActiveX的更新技術(shù),擴(kuò)展名也有可能是dll, DLL文件還有可能是動(dòng)態(tài)鏈接庫(.dll擴(kuò)展名)。主要是裝載一些函數(shù),可以動(dòng)態(tài)加載。