參考書本:
《evc高階程式設計及其應用開發》
客戶是主動的,而元件是被動的,元件通過自身暴露給客戶的介面來監聽客戶請求,一旦接收到客戶請求便宜做出反應,
這樣的介面稱為「入介面」(incoming inte***ce).
與入介面相對應,物件也可以提供"出介面",物件通過這些出介面與客戶進行通訊。出介面包含一組成員函式,每個函式代表乙個通知。
如果乙個com物件支援乙個或多個介面,那麼我們稱這樣的物件為可連線物件(connectable object).
出介面與入介面的區別:
入介面是由com物件本身來實現的,而出介面是由客戶程式來祥瑞的,客戶程式實現這些介面,並把介面指指告訴物件,以後物件便利用此介面與客戶程式通訊。
在客戶程式方,實現這些介面的物件稱為"接收器"(sink).
以下是它們的關係:
1、可連線物件的基本結構
可連線物件可以通過乙個或多個出介面與客戶端通訊。com中約定可連線物件必須實現乙個iconnectionpoointcaotiner介面,用於管理所有的出介面。
每個出介面對應乙個連線點物件,而連線點物件實現了iconnectionpoint介面,客戶可通過iconnectionpoint介面與連線物件建立連線。
2、客戶程式與可連線物件的關係。
聯結器也是乙個com物件,它位於客戶程式內部,並不需要通過com庫來建立,因此接收器不需要clsid標識。
客戶與可連線物件建立連線的過程如下:
(1)呼叫punk->queryinte***ce3(iid_iconnectionpointcontainer,&pconnectionpointcontainer),得到連線點容器介面
(2)呼叫pconnectionpointcontainer->findconnectionpoint(iid_isomeeventset, pconnectionpoint)查詢指定的連線點物件
(3)呼叫pconnectionpoint->advise(psomoeeventset, &dwcookie)建立與接收器的連線
(4)當客戶端要取消連線時,需要先呼叫pconnectionpoint->unadvise(dwcookie)
判斷乙個單鏈表是否有環及環的連線點
給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的入口點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1 判斷是否存在環 使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到...
連線MYSQL資料庫的方法及示例
以下為訪問mysql資料庫例項 編譯指令 csc r corelab.mysql.dll r mysql.data.dll test.cs using system using system.using system.text using corelab.mysql using system.dat...
物件池及資料庫連線物件池
objectpool類 物件池 using system using system.collections.generic using system.text using system.timers using system.collections namespace objectpool 建立乙個...