?? 《com 原理與應用》學習筆記 - linuszhu的專欄 - csdnblog.htm
字號:
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">特性</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可重用性:包容和聚合</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">進程透明性</SPAN><SPAN
lang=EN> (</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">待學</SPAN><SPAN
lang=EN>)</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安全性</SPAN><SPAN
lang=EN> (</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">待學</SPAN><SPAN
lang=EN>)</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多線程特性</SPAN><SPAN
lang=EN> (</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">待學</SPAN><SPAN
lang=EN>)</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">⊙</SPAN>
<SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第五章</SPAN>
<SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用</SPAN><SPAN
lang=EN> Visual C++ </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">開發</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">應用</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN>Win32 SDK </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的一些頭文件的說明</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">與</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口有關的一些宏</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>===============================================================================</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正</SPAN>
<SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>===============================================================================</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">⊙</SPAN>
<SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一章</SPAN>
<SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概述</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>===============================================================================</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是什么</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>-------------------------------------------------------------------------------</SPAN></P>
<P class=MsoNormal><SPAN lang=EN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是由</SPAN><SPAN
lang=EN> Microsoft </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提出的組件標準,它不僅定義了組件程序之間進行交互的標準,并且也提供了組件程序運行所需的環境。在</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">標準中,一個組件程序也被稱為一個模塊,它可以是一個動態鏈接庫,被稱為進程內組件</SPAN><SPAN
lang=EN>(in-process component)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">;也可以是一個可執行程序</SPAN><SPAN
lang=EN>(</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即</SPAN><SPAN
lang=EN> EXE </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序</SPAN><SPAN
lang=EN>)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,被稱作進程外組件</SPAN><SPAN
lang=EN>(out-of-process component)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。一個組件程序可以包含一個或多個組件對象,因為</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是以對象為基本單元的模型,所以在程序與程序之間進行通信時,通信的雙方應該是組件對象,也叫做</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象,而組件程序</SPAN><SPAN
lang=EN>(</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或稱作</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序</SPAN><SPAN
lang=EN>)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是提供</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象的代碼載體。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象不同于一般面向對象語言</SPAN><SPAN
lang=EN>(</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如</SPAN><SPAN
lang=EN> C++ </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">語言</SPAN><SPAN
lang=EN>)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的對象概念,</SPAN><SPAN
lang=EN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象是建立在二進制可執行代碼級的基礎上,而</SPAN><SPAN
lang=EN> C++ </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等語言中的對象是建立在源代碼級基礎上的,因此</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象是語言無關的。這一特性使用不同編程語言開發的組件對象進行交互成為可能。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>-------------------------------------------------------------------------------</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象與接口</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>-------------------------------------------------------------------------------</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">類似于</SPAN><SPAN
lang=EN> C++ </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中對象的概念,對象是某個類</SPAN><SPAN
lang=EN>(class)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一個實例;而類則是一組相關的數據和功能組合在一起的一個定義。使用對象的應用</SPAN><SPAN
lang=EN>(</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或另一個對象</SPAN><SPAN
lang=EN>)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">稱為客戶,有時也稱為對象的用戶。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口是一組邏輯上相關的函數集合,其函數也被稱為接口成員函數。按照習慣,接口名常是以“</SPAN><SPAN
lang=EN>I</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”為前綴。對象通過接口成員函數為客戶提供各種形式的服務。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模型中,對象本身對于客戶來說是不可見的,客戶請求服務時,只能通過接口進行。每一個接口都由一個</SPAN><SPAN
lang=EN> 128 </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位的全局唯一標識符</SPAN><SPAN
lang=EN>(GUID</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,</SPAN><SPAN
lang=EN>Global Unique Identifier)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">來標識。客戶通過</SPAN><SPAN
lang=EN> GUID </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">來獲得接口的指針,再通過接口指針,客戶就可以調用其相應的成員函數。</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">與接口類似,每個組件也用一個</SPAN><SPAN
lang=EN> 128 </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位</SPAN><SPAN
lang=EN> GUID </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">來標識,稱為</SPAN><SPAN
lang=EN> CLSID(class identifer</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,類標識符或類</SPAN><SPAN
lang=EN> ID)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,用</SPAN><SPAN
lang=EN> CLSID </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">標識對象可以保證</SPAN><SPAN
lang=EN>(</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概率意義上</SPAN><SPAN
lang=EN>)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在全球范圍內的唯一性。實際上,客戶成功地創建對象后,它得到的是一個指向對象某個接口的指針,因為</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象至少實現一個接口</SPAN><SPAN
lang=EN>(</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">沒有接口的</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象是沒有意義的</SPAN><SPAN
lang=EN>)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,所以客戶就可以調用該接口提供的所有服務。根據</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">規范,一個</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象如果實現了多個接口,則可以從某個接口得到該對象的任意其他接口。從這個過程我們也可以看出,客戶與</SPAN>
<SPAN lang=EN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象只通過接口打交道,對象對于客戶來說只是一組接口。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>-------------------------------------------------------------------------------</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">進程模型</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>-------------------------------------------------------------------------------</SPAN></P>
<P class=MsoNormal><SPAN lang=EN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所提供的服務組件對象在實現時有兩種進程模型:進程內對象和進程外對象。如果是進程內對象,則它在客戶進程空間中運行;如果是進程外對象,則它運行在同機器上的另一個進程空間或者在遠程機器的空間。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">進程內服務程序:</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服務程序被加載到客戶的進程空間,在</SPAN><SPAN
lang=EN> Windows </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">環境下,通常服務程序的代碼以動態連接庫</SPAN><SPAN
lang=EN>(DLL)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的形式實現。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本地服務程序:</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服務程序與客戶程序運行在同一臺機器上,服務程序是一個獨立的應用程序,通常它是一個</SPAN><SPAN
lang=EN> EXE </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">遠程服務程序:</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服務程序運行在與客戶不同的機器上,它既可以是一個</SPAN><SPAN
lang=EN> DLL </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模塊,也可以是一個</SPAN><SPAN
lang=EN> EXE </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。如果遠程服務程序是以</SPAN><SPAN
lang=EN> DLL </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">形式實現的話,則遠程機器會創建一個代理進程。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">雖然</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象有不同的進程模型,但這種區別對于客戶程序來說是透明的,因此客戶程序在使用組件對象時可以不管這種區別的存在,只要遵照</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">規范即可。然而,在實現</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象時,還是應該慎重選擇進程模型。進程內模型的優點是效率高,但組件不穩定會引起客戶進程崩潰,因此組件可能會危及客戶;</SPAN><SPAN
lang=EN>(savetime </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注:這里有點問題,如果組件不穩定,進程外模型也同樣會出問題,可能是因為進程內組件和客戶同處一個地址空間,出現沖突的可能性比較大?</SPAN><SPAN
lang=EN>)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">進程外模型的優點是穩定性好,組件進程不會危及客戶程序,一個組件進程可以為多個客戶進程提供服務,但進程外組件開銷大,而且調用效率相對低一點。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>-------------------------------------------------------------------------------</SPAN></P>
<P class=MsoNormal><SPAN lang=EN><SPAN style="mso-spacerun: yes">
</SPAN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可重用性</SPAN></P>
<P class=MsoNormal><SPAN
lang=EN>-------------------------------------------------------------------------------</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">標準是建立在二進制代碼級的,因此</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象的可重用性與一般的面向對象語言如</SPAN><SPAN
lang=EN> C++ </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中對象的重用過程不同。對于</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象的客戶程序來說,它只是通過接口使用對象提供的服務,它并不知道對象內部的實現過程,因此,組件對象的重用性可建立在組件對象的行為方式上,而不是具體實現上,這是建立重用的關鍵。</SPAN><SPAN
lang=EN>COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用兩種機制實現對象的重用。我們假定有兩個</SPAN><SPAN
lang=EN> COM </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象,對象</SPAN><SPAN
lang=EN>1 </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">希望能重用對象</SPAN><SPAN
lang=EN>2 </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能,我們把對象</SPAN><SPAN
lang=EN>1 </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">稱為外部對象,對象</SPAN><SPAN
lang=EN>2 </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">稱為內部對象。</SPAN></P>
<P class=MsoNormal><SPAN lang=EN> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN>(1)</SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包容方式。</SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">對象</SPAN><SPAN
lang=EN>1 </SPAN><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-fami
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -