2010-08-25 32 views
3

試圖瞭解什麼是IConnectionPoint以及它如何連接到IConnectionPointContainer,IEnumConnectionPoints,IEnumConnectionsEventHandling什麼是IconnectionPoint和EventHandling

MSDNCodeProject中讀取了手機,它解釋了其他方法,如:QueryInterface()和其他方法。

我無法弄清楚所有這些東西(IConnectionPointContainer,IEnumConnectionPoints,IEnumConnections)如何與eachother和事件處理互相聯繫。

我只想創建一個simpleClient,它將觸發COM對象中的事件。

如果有任何文章或代碼片段可以解釋事物之間的相互關係,那麼使用簡單和小塊的代碼將會很有幫助。

值得一提的是我最近在C開始開發,初學者。

編輯@sharptooth

對於線 「typically your client will receive events and the COM object will trigger those events

從很多文章,我的理解是,當我們在這一點上使用的連接點, the client exposes a set of methods that the server uses

我只是從TechRepublich:

客戶端服務器與沉源大綱文章的部分

因此,在一個標準的客戶端 - 服務器系統與COM正常編程和使用連接點之間的主要區別在標準的客戶端 - 服務器的情況下,服務器公開了客戶端使用的方法列表,並且在連接點情況下,客戶端公開了服務器使用的一組方法。

回答

7

看起來像你看到錯誤的大圖。通常你的客戶端會接收事件,COM對象會觸發這些事件。爲了達到這個目的,客戶端請求(QueryInterface()IConnectionPointContainer接口,調用IConnectionPointContainer::FindConnectionPoint()IConnectionPoint::Advise(),並在那裏傳遞一個指向自己或某個子對象的指針。

客戶端將不得不實現一些事件接口(其中一個GUID傳遞到IConnectionPointContainer::FindConnectionPoint())。一旦訂閱(建議),客戶端將接收來自COM服務器的呼叫 - 事件。

通常情況下,COM服務器會按常規做一些事情並決定通知它的客戶端(比如用戶在ActiveX控件中移動鼠標) - 它只是獲取指向事件接收器的指針數組,並在該接口上調用它想要的方法。

COM事件實際上是回調的執行。在COM中使用C++(或C或任何其他支持函數指針或接口的語言)的回調函數的方法相同。是的,你說得對,當服務器觸發事件​​時,客戶端實際上是作爲對事件作出反應的服務器。這是一個回調場景 - 其他代碼調用您的功能。在這種情況下,服務器調用您的事件接口的實現。

+0

用我的查詢編輯了問題 – Simsons 2010-08-25 07:16:11