共用方式為


可連接對象的架構

可連接的物件只是可連接物件整體架構的一部分。 這項技術包含下列元素:

  • 可連接的物件。 實作 IConnectionPointContainer 介面;建立至少一個連接點物件;定義客戶端的傳出介面。
  • 客戶。 查詢物件 IConnectionPointContainer,以判斷物件是否可連接;會建立接收物件,以實作可連接物件所定義的傳出介面。
  • Sink 物件。 實作傳出介面;用來建立可連接對象的連接。
  • 連接點物件。 實作 IConnectionPoint 介面,並管理與用戶端接收的連線。

下圖說明用戶端、可連接物件、連接點和接收之間的關聯性:

顯示 Client 與 Connectable 物件之間連接點的圖表。

在上圖的步驟 3 中,連接點物件呼叫接收介面的方法之前,它必須針對所需的特定介面 QueryInterface,即使指標已在步驟 2 呼叫中傳遞至 建議 方法也一樣。

此架構也涉及兩個列舉值物件,但不顯示在圖例中。 其中一個是由 IConnectionPointContainer 方法所建立, 列舉可連接物件內的連接點。 另一個是由 IConnectionPoint方法所建立,以列舉目前與該連接點建立的連接。 一個連接點可以支援多個連接的接收介面,而且每次在介面上呼叫方法時,都應該逐一查看連線清單。 此程序稱為多播。

使用可連接的物件時,請務必瞭解可連接的物件、每個連接點、每個接收,以及所有列舉值都是具有個別 IUnknown 實作、個別參考計數和個別存留期的個別物件。 使用這些物件的用戶端一律負責釋放其擁有的所有參考計數。

注意

可連接的物件可以支援多個用戶端,而且可以在用戶端內支援多個接收。 同樣地,接收可以連接到一個以上的可連接物件。

 

在用戶端與可連接對象之間建立連線的步驟如下:

  1. 用戶端會查詢物件上的 IConnectionPointContainer,以判斷物件是否可連接。 如果此呼叫成功,用戶端會保留可連接物件上 IConnectionPointContainer 介面的指標,而且可連接的對象參考計數器已遞增。 否則,對象無法連接且不支援連出介面。
  2. 如果對象可連接,客戶端接著會嘗試取得可連接物件內連接點上 IConnectionPoint 介面的指標。 取得此指標的方法有兩種,這兩種方法位於 IConnectionPointContainer::FindConnectionPointIConnectionPointContainer::EnumConnectionPoints中。 如果使用 EnumConnectionPoints,則需要一些額外的步驟。 (如需詳細資訊,請參閱使用 IConnectionPointContainer 。如果成功,可連接的物件和用戶端都支援相同的傳出介面。 可連接的物件會定義並呼叫它,而用戶端會實作它。 用戶端接著可以透過可連接物件內的連接點進行通訊。
  3. 客戶端接著會在連接點上呼叫 建議,以在其接收介面與對象的連接點之間建立連線。 在此呼叫之後,對象的連接點會保存接收上連出介面的指標。
  4. 建議內的程式代碼 呼叫傳入介面指標上的 queryInterface ,要求其連接的特定介面標識碼。
  5. 對象會視需要呼叫接收介面上的方法,並使用其連接點所持有的指標。
  6. 用戶端會呼叫 取消 終止連線。 然後,用戶端會呼叫 IConnectionPoint::Release,以釋放連接點上的保留,因此,主要可連接物件也會。 用戶端也必須呼叫 IConnectionPointContainer::Release,以釋放其在主要可連接物件上的保留。

Connectable 物件介面