




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