版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第2章 COM與數據庫訪問第2章 COM與數據庫訪問2.1 COM的基本原理COM即組件對象模型,是一種以組件為發(fā)布單元的對象模型,這種模型使各種軟件組件可以通過一種通用的方式進行交互。COM既提供了組件之間進行交互的規(guī)范,也提供了實現交互的環(huán)境,因為組件對象之間交互的規(guī)范不依賴于任何特定的語言,所以COM也可以是不同語言協作開發(fā)的一種標準。也許讀者對OLE(對象鏈接嵌入,Object Linking and Embedding )不太陌生,OLE技術也是以COM技術為基礎的。OLE充分發(fā)揮了COM標準的優(yōu)勢,使Windows操作系統上的應用程序具有非常強大的可交互性。如果沒有OLE的支持,W
2、indows操作系統一定遜色許多。但是COM規(guī)范并不局限于OLE技術,實際上,OLE技術只是COM的一個應用而已,近年來網絡技術迅猛發(fā)展,OLE技術在進行網絡互聯時表現出很大的局限性,而COM則表現出了很好的適應能力,因此,伴隨著網絡技術的發(fā)展,COM也得到了很好的展示機會。繼OLE技術之后,微軟又推出了一系列以COM為基礎的技術,即ActiveX技術,再一次展示了COM的價值。2.1.1 COM歷史微軟起初并沒有意料到COM的強勁發(fā)展勢頭,最初微軟在桌面窗口系統里使用了OLE,隨著桌面窗口應用程序之間交互的不斷深入,微軟將OLE發(fā)展成為COM,而后來COM技術的不斷發(fā)展表明,COM所定義的組
3、件標準其廣泛性遠遠超過了OLE所具有的能力。其實一開始COM就具有很好的應用前景,但是由于OLE技術的復雜性,一般人很少能窺探到OLE的底層,尤其是通過OLE學習COM本來就是本末倒置,所以可以這樣說,是OLE阻礙了COM的發(fā)展,甚至是OLE的一些缺點掩蓋了COM的優(yōu)勢。但是這種情況很快有了好轉,人們認識到了COM是符合當前軟件發(fā)展需要的很好的組件標準,使用COM進行軟件構造是一種理想的應用方案。COM脫離了OLE之后得到了很大的發(fā)展,現在COM已經遍布于微軟的各種軟件中了。組件化軟件結構為我們帶來了極大的好處,首先是軟件升級的靈活性,每個組件可單獨開發(fā),單獨升級,甚至單獨調試和測試,只要組建
4、的接口不變,組件的升級不會影響到軟件的其它部分。其次,COM是一種面向對象的組件模型,COM對象以接口的方式提供服務,我們統稱之為COM接口。從COM在OLE2中首次作為底層技術使用以來,COM已經走過了六、七年時間,而且日益壯大,成為廣為接受的軟件組件模型。2.1.2 COM結構 COM組件對象1對象2接口1接口2接口3COM為組件和應用程序之間提供了進行通信的統一標準,為組件程序提供了一個面向對象的活動環(huán)境。COM標準包括規(guī)范和實現兩大部分,規(guī)范部分定義了組件和組件之間通信的機制,這些規(guī)范不依賴于任何特定的語言和操作系統,只要遵循該規(guī)范,任何語言都可以作為組件開發(fā)的原始語言;COM標準的實
5、現部分是COM庫,COM庫為COM規(guī)范的具體實現提供了一些核心服務。圖2-1表示了COM組件、COM對象與COM接口三者之間的關系。圖2-1 COM組件、對象與接口三者之間的關系COM是面向對象的軟件模型,對象是它的基本要素之一。COM對象有些類似于C+中對象的概念,對象是類的一個實例。COM接口是一組邏輯上相關的函數集合,通常的COM接口都是以字母“I”作為前綴,例如IUnknown接口,對象通過接口成員函數為客戶提供各種形式的服務。在COM模型里,對象對于使用組件的用戶來說是透明的,客戶請求服務時,只能通過接口進行。COM的每個接口都由一個128位的全局標識符(GUID,Globally
6、Unique Identifier)來標識,客戶通過GUID獲得接口的指針,再通過接口指針調用其相應的成員函數??蛻舳藢OM對象的標識也是通過一個128位的GUID來實現,稱為CLSID(Class Identifier),使用CLSID可以保證對象在全球范圍內的唯一性。只要用戶的系統中含有該類COM對象的信息,并且包括COM對象所在的模塊文件(DLL或者EXE文件)以及COM對象在代碼中的入口點,客戶程序就可以通過CLSID創(chuàng)建對象(實際上是得到對象的一個指針),然后調用對象的成員函數,實現特定的功能。COM對象和客戶之間的相互作用是建立在客戶/服務器模型上的,客戶/服務器模型的最大優(yōu)勢是
7、它的穩(wěn)定性,正是這種穩(wěn)定性為COM奠定了基礎。另外,在客戶/服務器模型的基礎上,COM技術靈活地擴展了這一模型。在圖2-2中,每個箭頭表示了一個客戶-服務器關系。圖2-2(a)表示了一種簡單的客戶/服務器模型;在圖2-2(b)中,對象2不僅為客戶提供服務,還為對象1提供服務,對象1同時是對象2的一個客戶,又為客戶提供服務,在這個模型中,對象1由客戶直接創(chuàng)建,而對象2既可以由對象1創(chuàng)建,又可以由客戶創(chuàng)建;圖2-2(c)和圖2-2(d)分別表示了COM中兩種重要的對象重用結構:包容(Containment)和聚合(Aggregation)。對于客戶來說,他只知道對象1的存在,而并不知道對象2的存在
8、,但對象1在某些服務的實現中用到了對象2的某些服務。圖2-2(c)和圖2-2(d)所表示的兩種模型的區(qū)別在于,在(c)中,當用戶調用到對象2的服務時,是由對象1調用對象2的服務然后將服務結果傳遞給客戶的,這是一種間接的調用,而在(d)中,對象1直接把客戶對服客戶對象2對象1(客戶)務的調用轉移給對象2,由對象2直接對客戶提供服務,這是一種直接的調用??蛻鬋OM對象1對象2客戶對象 (a) (b)客戶COM對象1對象2 (c) (d)圖2-2 COM的客戶/服務器模型擴展COM除了規(guī)范以外也有實現部分,包括一些核心的系統級代碼,是這些代碼使得對象和庫之間可以通過接口在二進制代碼級別上進行交互。在
9、Windows操作系統下,這些代碼是以DLL文件的形式存在的,其中包括以下內容:(1) 提供了少量的API函數實現客戶和服務端COM應用的創(chuàng)建過程。在客戶端主要是一些創(chuàng)建函數;而在服務端,則提供了一些對象訪問支持。(2) COM通過注冊表查找本地服務器,即EXE程序,以及程序名與CLSID的轉換。(3) 提供了一種標準的內存控制方法,使應用程序控制進程中內存的分配。COM庫可以保證所有的組件按照統一的方式進行交互操作,使我們在編寫COM應用程序時,不必為COM通信編寫大量的基礎代碼,而是直接利用COM的API函數實現,從而大大加快了開發(fā)的速度。另外,COM庫實現了更多的特性,例如DCOM,我們
10、可以充分享用這些特性。2.1.3 COM優(yōu)勢COM除了客戶/服務器模型特性以外,還具有語言無關性、進程透明性以及可重用機制。COM規(guī)范的定義不依賴于任何特定的語言,因此編寫組件對象所使用的語言和編寫客戶程序使用的語言可以不同,只要他們都能夠生成符合COM規(guī)范的可執(zhí)行代碼即可。COM標準與面向對象的編程語言不同,它所采用的是一種二進制代碼級別的標準,而不是源代碼級別的標準。面向對象編程語言中定義的對象不能夠跨語言進行調用,大大限制了對象的重用。COM對象把OOP(面向對象編程)語言中的對象封裝到一個二進制代碼里,并提供統一的接口,可以被其它編程語言所使用。COM的進程透明性是指,運行在客戶程序中
11、的代碼與運行在服務程序中的代碼可以在一個進程中,也可以在不同的進程中,這取決于COM編程的方式,但是這種進程的運行對用戶來說是透明的,用戶可以不關心進程的位置。通常COM代碼運行的方式有兩種:一種是運行在客戶進程里,另外一種是運行在客戶進程之外。顯然前者具有很高的效率,因為它可以共享客戶進程里的數據,但是前者在穩(wěn)定性方面就不及后者健壯,后者COM組件的不穩(wěn)定性不會影響到客戶進程的運行,前者則會在這種情況下崩潰。可重用性是所有組件模型要實現的共同目標,尤其對大型的軟件系統,軟件的可重用性具有非常重要的意義。對COM對象的客戶程序來說,它只是通過接口使用對象提供的服務,并不了解對象內部的實現過程,
12、因此組建的重用性可以建立在組件對象的行為方式上,而不是在具體實現上,這是建立重用的關鍵。COM通過兩種機制實現對象的重用,一種是包容方式,一個對象需要調用另外一個對象的功能時自行調用,而不需要用戶干預;另外一種是聚合方式,一個對象在需要另外一個對象的功能時只是把該對象的接口暴露給用戶,由用戶通過接口進行功能調用。對象重用是COM規(guī)范很重要的一個方面,它保證了COM可以用于構建大規(guī)模的軟件系統,使復雜的系統簡化為一些相對簡單的組件對象模塊,體現了面向對象的思想。2.1.4 COM接口COM對象的客戶與對象之間通過接口進行交互,COM規(guī)范的核心內容是關于接口的定義。在軟件重用上,COM同傳統的AP
13、I相比具有很大的優(yōu)勢。傳統的API一般是通過DLL庫實現的,在函數聲明時也可以基本實現組件程序的重用性,可以將兩個程序連接起來,但是這種API存在以下兩個問題:(1) 當API函數非常多的時候,使用不方便,需要對函數進行有效地組織。例如,Windows系統的API函數有300多個,編程接口面太寬,不利于接口層的管理。(2) API函數需要標準化,按照統一的調用方式進行處理,以使用不同的語言編程實現。參數的傳遞、參數類型、函數返回處理都需要標準化。COM定義了一套完整的接口規(guī)范,不僅可以彌補API作為組件接口的不足,還發(fā)揮了組件對象的優(yōu)勢,并實現了組件對象的多態(tài)性。在COM接口里最常用的是IUn
14、known接口,其它所有的接口都從該接口繼承過來,IUnknown接口提供了兩個非常重要的特性:生存期控制和接口查詢。IUnknown接口引入了“引用計數”機制,可以有效地控制對象的生存期。另一方面,如果對象實現了多個接口,初始化時,對象不可能提供所有接口指針,它只會擁有一個接口指針,這時,用戶可以使用接口查詢的方法來獲得其它接口。IUnknown接口定義了三種方法:QueryInterface、AddRef、Release,所有的COM接口都可使用這三個接口。對象不再使用的時候,COM并不會自動將其從內存中移走,COM開發(fā)人員必須自己將不同的對象移去,可以根據引用計數決定是否移去一個對象。C
15、OM通過IUnknown接口的AddRef、Release兩種方法管理對象接口的引用計數,它們的通常調用規(guī)范如下:· 客戶在任何時候收到一個接口指針,AddRef都必須被接口調用。· 客戶使用完對象以后必須調用Release函數。AddRef和Release成員函數為生存期控制提供了支持,生存期控制就是通過引用計數來實現的。每個對象擁有一個可以跟蹤對象的指針,或者引用的內部值。當對象創(chuàng)建時該計數為1。如果附加的接口或者接口的成員函數被創(chuàng)建,則該計數遞增。相應地,如果接口的指針被銷毀,則該計數遞減。當引用計數為0時,該對象自行銷毀。AddRef函數用來使對象的引用計數遞增,而
16、Release函數則使引用計數遞減,當引用計數為0時,Release函數釋放對象。按照COM規(guī)范,一個COM對象可以支持多個接口,客戶可以在運行時對COM對象的接口進行查詢,QueryInterface函數允許COM對象實現這樣的功能。查詢是通過輸入一個128位的GUID來實現的,稱為IID。QueryInterface函數的查詢結果是接口的一個指針,存放在它的另外一個參數里,查詢失敗時,該指針為空。2.1.5 COM與數據庫訪問COM對數據庫訪問的支持主要表現在OLE DB和DAO上。OLE DB是完全基于COM的,可以認為它是ODBC的替代品,但不再局限于關系型數據庫,而是幾乎適用于所有的
17、線性數據;DAO是建立在OLE DB上層的自動化對象庫,它可以廣泛運用于各種腳本語言中,為腳本語言訪問數據庫提供了極大的便利。OLE DB/DAO包含數據庫訪問的三個層次:數據提供者(data provider)、數據服務組件(data service component)、數據使用者(data consumer)。由于采用了開放的COM接口,增加數據源支持將變得更加容易,數據提供者只需要提供基本的服務,在應用層上的數據使用者就可以獲得各種服務組件提供的服務。OLE DB/DAO以COM的方式為數據訪問提供了一致的接口,這些接口已經被廣泛運用于微軟的各種產品中,并且微軟推出的Visual Ba
18、sic開發(fā)工具套也提供了OLE DB組件的開發(fā)支持,因此,OLE DB/DAO將會得到進一步的發(fā)展。2.1.6 COM與InternetCOM在Internet相關軟件中的發(fā)展最能體現COM的優(yōu)勢,因為Internet軟件要求有很好的開放性,開放性就意味著要遵循標準,在Windows平臺上,COM就是這樣的標準。微軟提出的ActiveX技術包含了所有基于COM的Internet相關的軟件技術。從服務器方面,ASP(Active Server Page)把微軟的IIS(Internet Information Server,Internet信息服務器)和其它的軟件產品結合起來了。ASP頁面文件中
19、的腳本分成服務器方執(zhí)行的代碼和客戶方執(zhí)行的代碼,而服務器方執(zhí)行的代碼可以通過ADO訪問IIS服務器上的數據庫,可以調用其它ASP(也是COM組件對象)所提供的各種功能服務。因此,在服務方提供動態(tài)信息時非常方便,只需要在服務器上開發(fā)一些ASP對象即可,這種Web服務器通過微軟的開發(fā)工具可以很容易地實現。從Internet的客戶方來看,其內容更為豐富,Internet Client SDK提供了很多可以直接使用的組件或者特性,包括ActiveX控制、WebBrowser控制、XML對象模型、Internet Explorer地址簿(通過LDAP協議實現)等,這些組件可以為Internet用戶提供更
20、多的便利,同時提供更為豐富多彩的信息。由于COM已經滲透到Internet的各種軟件中,包括一些基本的協議軟件,所以,隨著Internet的發(fā)展,COM必將得到更加廣泛的應用。2.2 ActiveX的數據庫訪問2.2.1 ActiveX簡介ActiveX是COM技術的進一步擴展,它定義了組件的通用性,使組件能夠同另外一個組件通信,而不對創(chuàng)建組件的語言進行限制;ActiveX定義了組件的分布式對象模型(DCOM),使分布在不同機器上的組件之間的通信可以像本地訪問一樣容易。ActiveX在Internet上的廣泛應用使得Internet用戶可以在它的支持下實現與網頁內容的交互,為建立活動頁面奠定了
21、技術基礎。ActiveX的優(yōu)勢是:· 開放的、跨平臺的支持,支持Macintosh、 Windows 和 UNIX等開放系統。· 通過網頁內容交互可以吸引和保持用戶。· 具有有力的開發(fā)工具支持,Microsoft 的Visual Basic和Visual C+、Borland 的Delphi和C+,、Java以及支持Java的工具都可以使用ActiveX技術。· 大量的ActiveX 控制可以直接被用戶使用。.· 工業(yè)標準支持HTML、 TCP/IP、Java和COM。ActiveX的內容包括:· ActiveX控制:在交互的、用戶可
22、控制Web頁面里提供活動對象。· ActiveX文檔:使用戶可以瀏覽非HTML文檔,例如Microsoft Excel 或者Word 文件。· ActiveX腳本:可以在瀏覽器里或者服務端控制幾個ActiveX控件以及與Java Applets的集成功能。· Java 虛擬機:使支持ActiveX的瀏覽器可以運行Java Applets,或者集成Java Applets和ActiveX控制。· ActiveX服務器框架:提供一些基于Web服務器的功能,例如,安全、數據操作和其他功能。2.2.2 ActiveX對數據庫訪問的支持ActiveX對數據庫訪問的
23、支持指ADO,因此有必要對ADO進行深入探討。ADO是OLE DB層次上的高級數據庫訪問接口API,與OLE DB 相比,ADO的編程更容易。ADO適用于更多的語言,尤其適合腳本語言,例如VBScript和JavaScript等。ADO也適用于多種編程語言,包括Visual Basic、Java和Visual C+。ADO提供了一個“雙重界面”,正是這個“雙重界面”使得ADO同時適用于腳本語言和編程語言。ADO實際上提供了兩套API,一套通過OLE自動化,該套API面向不適用指針的語言,比如腳本語言。另一套API通過vtable界面向C+程序提供。ADO的編程模型一般由一個動作系列組成。ADO
24、提供了一組類,可以簡化在C+代碼中建立這種序列的處理。通常的動作系列是:· 連接到一個數據源。· 指定對該數據源的一個查詢。· 執(zhí)行該查詢。· 把查詢數據檢索到一個在C+代碼中容易訪問的對象里。· 需要時更新數據源,來反映對該數據的編輯。· 提供檢測錯誤的方法。2.3 ATL的數據庫訪問2.3.1 ATL目標自從1993年Microsoft首次公布COM技術以后,Windows平臺上的開發(fā)模式發(fā)生了巨大變化,以COM技術為基礎的一系列軟件組件化技術將Windows編程帶入了組件化時代。廣大的軟件開發(fā)人員在為COM帶來的軟件組件化趨勢歡
25、欣鼓舞的同時,對COM開發(fā)技術的難度和煩瑣的細節(jié)也深感不便。COM編程一度被視為一種高不可攀的技術,令人望而卻步。軟件開發(fā)人員希望能夠有一種方便快捷的COM開發(fā)工具,提高開發(fā)效率,更好地利用這項技術。針對這種情況,Microsoft公司在推出COM SDK以后,為簡化COM編程,提高開發(fā)效率,采取了許多方案,特別是在MFC(Microsoft Foundation Class)中加入了對COM和OLE的支持。但是隨著Internet的發(fā)展,分布式的組件技術要求COM組件能夠在網絡上傳輸,而又盡量節(jié)約寶貴的網絡帶寬資源。采用MFC開發(fā)的COM組件由于種種限制不能很好地滿足這種需求,因此Micro
26、soft在1995年又推出了一種全新的COM開發(fā)工具ATL。在ATL產生以前,開發(fā)COM組件的方法主要有兩種:一是使用COM SDK直接開發(fā)COM組件,另一種方式是通過MFC提供的COM支持來實現。直接使用COM SDK開發(fā)COM組件是最基本也是最靈活的方式。通過使用Microsoft提供的開發(fā)包,我們可以直接編寫COM程序。但是,這種開發(fā)方式的難度和工作量都很大,一方面,要求開發(fā)者對于COM的技術原理具有比較深入的了解(雖然對技術本身的深刻理解對使用任何一種工具都是非常有益的,但對于COM這樣一整套復雜的技術而言,在短時間內完全掌握是很難的),另一方面,直接使用COM SDK要求開發(fā)人員自己
27、去實現COM應用的每一個細節(jié),完成大量的重復性工作。這樣做的結果是,不僅降低了工作效率,同時也使開發(fā)人員不得不把許多精力投入到與應用需求本身無關的技術細節(jié)中。雖然這種開發(fā)方式對于某些特殊的應用很有必要,但這種編程方式并不符合組件化程序設計方法所倡導的可重用性,因此,直接采用COM SDK不是一種理想的開發(fā)方式。使用MFC提供的COM支持開發(fā)COM應用可以說在使用COM SDK基礎上提高了自動化程度,縮短了開發(fā)時間。MFC采用面向對象的方式將COM的基本功能封裝在若干MFC的C+類中,開發(fā)者通過繼承這些類得到COM支持功能。為了使派生類方便地獲得COM對象的各種特性,MFC中有許多預定義宏,這些
28、宏的功能主要是實現COM接口的定義和對象的注冊等通常在COM對象中要用到的功能。開發(fā)者可以使用這些宏來定制COM對象的特性。另外,在MFC中還提供對Automation 和 ActiveX Control的支持,對于這兩個方面,Visual C+也提供了相應的AppWizard和ClassWizard支持,這種可視化的工具更加方便了COM應用的開發(fā)。MFC對COM和OLE 的支持確實比手工編寫COM程序有了很大的進步。但是MFC對COM的支持是不夠完善和徹底的,例如對COM接口定義的IDL語言,MFC并沒有任何支持,此外對于近些年來COM和ActiveX技術的新發(fā)展MFC也沒有提供靈活的支持。
29、這是由MFC設計的基本出發(fā)點決定的。MFC被設計成對Windows平臺編程開發(fā)的面向對象的封裝,自然要涉及Windows編程的方方面面,COM作為Windows平臺編程開發(fā)的一個部分也得到MFC的支持,但是MFC對COM的支持是以其全局目標為出發(fā)點的,因此對COM的支持必然要服從其全局目標。從這個方面而言,MFC對COM的支持不能很好的滿足開發(fā)者的要求。隨著Internet技術的發(fā)展,Microsoft將ActiveX技術作為其網絡戰(zhàn)略的一個重要組成部分大力推廣,然而使用MFC開發(fā)的ActiveX Control,代碼冗余量大(所謂的“肥代碼Fat Code”),而且必須要依賴于MFC的運行時
30、刻庫才能正確地運行。雖然MFC的運行時刻庫只有部分功能與COM有關,但是由于MFC的繼承實現的本質,ActiveX Control必須背負運行時刻庫這個沉重的包袱。如果采用靜態(tài)連接MFC運行時刻庫的方式,這將使ActiveX Control代碼過于龐大,在網絡上傳輸時將占據寶貴的網絡帶寬資源;如果采用動態(tài)連接MFC運行時刻庫的方式,這將要求瀏覽器一方必須具備MFC的運行時刻庫支持??傊甅FC對COM技術的支持在網絡應用的環(huán)境下也顯得很不靈活。解決上述COM開發(fā)方法中的問題正是ATL的基本目標。首先ATL的基本目標就是使COM應用開發(fā)盡可能地自動化,這個基本目標就決定了ATL只面向COM開發(fā)提供
31、支持。目標的明確使ATL對COM技術的支持達到淋漓盡致的地步。對COM開發(fā)的任何一個環(huán)節(jié)和過程,ATL都提供支持,并將與COM開發(fā)相關的眾多工具集成到一個統一的編程環(huán)境中。對于COM/ActiveX的各種應用,ATL也都提供了完善的Wizard支持。所有這些都極大地方便了開發(fā)者的使用,使開發(fā)者能夠把注意力集中在與應用本身相關的邏輯上。其次,ATL因其采用了特定的基本實現技術,擺脫了大量冗余代碼,使用ATL開發(fā)出來的COM應用的代碼簡練高效,即所謂的“Slim Code”。ATL在實現上盡可能采用優(yōu)化技術,甚至在其內部提供了所有C/C+開發(fā)的程序所必須具有的C啟動代碼的替代部分。同時ATL產生的
32、代碼在運行時不需要依賴于類似MFC程序所需要的龐大的代碼模塊,包含在最終模塊中的功能是用戶認為最基本和最必須的。這些措施使采用ATL開發(fā)的COM組件(包括ActiveX Control)可以在網絡環(huán)境下實現應用的分布式組件結構。第三,ATL的各個版本對Microsoft的基于COM的各種新的組件技術如MTS、ASP等都有很好的支持,ATL對新技術的反應速度大大快于MFC。ATL已經成為Microsoft支持COM應用開發(fā)的主要開發(fā)工具,因此COM技術方面的新進展在很短的時間內都會在ATL中得到反映。這使開發(fā)者使用ATL進行COM編程可以得到直接使用COM SDK編程同樣的靈活性和強大的功能。2
33、.3.2 ATL內容簡介ATL是ActiveX Template Library 的縮寫,它是一套C+模板庫。使用ATL能夠快速地開發(fā)出高效、簡潔的代碼(Effective and Slim code),同時對COM組件的開發(fā)提供最大限度的代碼自動生成以及可視化支持。為了方便使用,從Microsoft Visual C+ 5.0版本開始,Microsoft把ATL集成到Visual C+開發(fā)環(huán)境中。1998年9月推出的Visual Studio 6.0 集成了ATL 3.0版本。目前,ATL已經成為Microsoft標準開發(fā)工具中的一個重要成員,日益受到C+開發(fā)人員的重視。同MFC類似,ATL
34、提供了一套基于模板的C+類,通過這些類,可以很容易地創(chuàng)建一個小型的、快速的COM對象,因此可以說,ATL是為COM應用開發(fā)的,ATL是一個產生C+/COM代碼的框架,就如同C語言是一個產生匯編代碼的框架一樣。ATL的內部模板類實現了COM的一些基本特性,比如一些基本的COM接口IUnknown、IClassFactory、IClassFactory2 和IDispatch的實現。ATL也支持COM的一些高級特性,如雙重接口,標準COM 計數器接口,連接點,以及ActiveX等。通過ATL建立的COM對象支持套間線程和自由線程兩種模型。模板是C+語言的高級語法特性,它是更高層次上的抽象。在使用模
35、板庫時,我們不再通過繼承的方式使用模板,而是對模板進行實例化以便得到類,可以說模板是對類的抽象,因此使用和編寫模板對程序員的要求很高,尤其要求模板本身的代碼必須是類型安全的。ATL實現COM接口的方式與MFC有所不同,MFC使用嵌套類的方式實現COM接口,用接口映射表提供多接口支持,ATL則使用多重繼承的方式實現COM接口。雖然MFC和COM在實現接口上不同,但是二者支持形式非常相似,MFC采用接口映射表,定義了一組宏;ATL采用了COM映射表,也定義了一組形式上很相似的宏。為了支持COM對象的創(chuàng)建,ATL還定義了對象映射表。對象映射表是一張全局表,放在ATL應用的主源文件里。簡單地說來,ATL中所使用的基本技術包括以下三個方面:· C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校長新年寄語祝福九年級(初三)同學
- 小學考試管理制度
- 買賣合同(供進口成套設備用)5篇
- 二零二五年度駕校應急處理與安全保障合同3篇
- 第17章-第1節(jié)-總需求曲線教材課程
- 《科幻小說賞析與寫作》 課件 第3、4章 “太空歌劇”的探索與開拓-《2001太空漫游》;“生命奇跡”的重述與復魅-《弗蘭肯斯坦》
- 二零二五年度網絡安全風險評估與維保服務合同3篇
- 2024年隴南市精神病康復醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 二零二五年度高端制造項目反擔保協議3篇
- 2024年陽江市人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 向電網申請光伏容量的申請書
- 2024-2030年中國硫磺行業(yè)供需形勢及投資可行性分析報告版
- 新人教版八年級上冊數學知識點歸納及??碱}型
- 公文改錯完整版本
- ISO22716-執(zhí)行標準化妝品良好操作規(guī)范GMPC標準及內審員培訓教材
- 一個女兒的離婚協議書模板
- 2024年重點高中自主招生物理試題含答案
- 2020-2021學年-人教版八年級英語下冊-Unit-1-閱讀理解專題訓練(含答案)
- 智慧農業(yè)總體實施方案(2篇)
- 天然甜味劑的開發(fā)與應用
- 2024年大學試題(宗教學)-佛教文化筆試參考題庫含答案
評論
0/150
提交評論