介面支持的意義

除了 IUnknown 介面之外,ActiveX Control 或 COM 物件也表示它透過其他介面支援的任何選擇性功能。 也就是說,IUnknown 上方不需要其他介面。 為此,下表列出 ActiveX Control 可能支援的介面,以及支援該介面的意義。

介面 批注/支援介面的意義
IOleObject
如果控件需要與其用戶端月台通訊的事件以外的任何專案(請參閱 I 連線 ionPointContainer),則 IOleObject 是必要的。 實作這個介面時,控件也必須支援下列方法的語意:SetHostNamesCloseEnumVerbsUpdateIsUpToDate、GetUserClassID、GetUserTypeGetMiscStatus 和建議Unadvise 和EnumAdvise 方法可與容器的 IAdviseSink 實作搭配運作。 如果容器提供 IAdviseSink,實作 IOleObject 的控件必須能夠處理 IAdviseSink;在此情況下,控件可能無法確保它不會嘗試呼叫不存在的接收。
IOleInPlaceObject
表示控制項可就地啟用且可能啟用UI的能力。 這個介面表示控件具有某種可啟動的使用者介面,而且也支援 IOleInPlaceActiveObject 必要的方法是 GetWindowInPlaceDeactivate、UIDeactivateSetObjectRects ReactivateAndUndo。 此介面的支援需要 IOleObject 的支援。
IOleInPlaceActiveObject
支援 IOleInPlaceObject 的就地支援對象也必須提供這個介面,不過控件本身不一定直接實作介面。
IOleControl
表示控件處理 (a) 助記鍵的能力和願望(GetControlInfoOnMnemonic 方法)、(b) 環境屬性 (OnAmbientPropertyChange) 和/或 (c) 事件,控件要求容器處理 (FreezeEvents)。 請注意,助記鍵與透過 IOleInPlaceActiveObject 處理的快捷鍵不同:助記鍵具有相關聯的 UI,即使控件不在 UI 作用中也一樣。 控件對助記鍵的支援表示控件也知道如何使用容器的 IOleControlSite::OnControlInfoChanged 方法。 由於這需要控件知道容器的網站,因此助記鍵的支援也表示支援 IOleObject 此外,助記鍵的知識需要就地支援,因此 IOleInPlaceObject
如果控件使用任何容器環境屬性,則也必須實作此介面來接收變更通知,因為需要遵循變更的語意。 因為環境屬性只能透過容器月臺的 IDispatch 取得,環境屬性支援表示控件支援 IOleObject (若要取得網站),也能夠產生 IDispatch::Invoke 呼叫。
需要 FreezeEvents 方法才能讓必須知道容器何時不會處理事件,這是控件知道此條件的唯一方法。 如果 FreezeEvents 只有在隔離時才需要,因此不會實作其他 IOleControl 方法,則 IOleControl 可以獨立獨立,而不需要 IOleObject IOleInPlaceObject。
IDataObject
指出控制項至少可以提供控制元件的圖形化轉譯 (CF_METAFILEPICT 為控制件具有任何視覺效果的最小值)和/或 (b) 屬性集,如果控制項具有要提供的任何屬性,則為 。 需要 GetData、QueryGetData、EnumFormatEtcDAdvise、DUnadvise EnumDAdvise 方法。 CF_METAFILEPICT以外的圖形化格式支援是選擇性的。
IViewObject2
指出當控件不在就地作用中時,有一些有趣的視覺效果。 如果實作,控件必須支援 DrawGetAdvise、SetAdviseGetExtent 方法。
IDispatch
表示控件具有 (a) 自定義方法,或 (b) 自定義屬性,可透過 IDispatch::Invoke 透過晚期系結取得。 這也需要控件透過其他 IDispatch 方法提供類型資訊。 控件可支援多個 IDispatch 實作,其中只有一個與IID_IDispatch其他控件必須有自己的唯一的散發介面識別碼。
鼓勵控件提供自定義方法和屬性存取的雙重介面,但如果方法和屬性存在,則這是選擇性的。
I 連線 ionPointContainer
表示控件至少支援一個傳出介面,例如事件或屬性變更通知。 如果這個介面完全可用,則必須實作此介面的所有方法,包括 Enum 連線 ionPoints,其需要具有 IEnum 連線 ionPoints 的個別物件。
支援 I 連線 ionPointContainer 表示物件也支援一或多個具有 I 連線 ionPoint 的相關物件,這些物件可透過 I 連線 ionPointContainer 方法取得。 每個連接點物件本身都必須實作完整的 I 連線 ionPoint 介面,包括 Enum 連線 ions,這需要另一個具有 IEnum 連線 ions 介面的列舉值物件。
IProvideClassInfo
IProvideClassInfo2
表示物件可以直接透過 IProvideClassInfo::GetClassInfo 提供自己的 coclass 類型資訊。 如果控件支援稍後的變化 IProvideClassInfo2,則也會指出它透過 IProvideClassInfo2::GetGUID 提供主要來源 IID 的能力。 這個介面的所有方法都必須實作。
ISpecifyPropertyPages
指出控件有屬性頁,它可以顯示,讓容器可以協調此控件的屬性頁與其他控件的頁面,當屬性頁要針對多重控件選取項目顯示時。 當支援存在時,必須實作這個介面的所有方法。
IPerPropertyBrowsing
表示控制件 (a) 提供屬性的顯示字串的能力,(b) 提供其屬性的預先定義字串和值,以及/或 (c) 會將屬性 dispID 對應至特定屬性頁。 此介面的支援表示已提供透過 IDispatch 支援屬性。 如果支援 (c) ,則這也表示對象的屬性頁會透過 IPerPropertyBrowsing::MapPropertyToPage 本身實作 IPropertyPage2,而不是基本的 IPropertyPage 介面。
IPersistStream
IPersistStreamInit
IPersistMemory
IPersist 儲存體
IPersistMoniker
IPersistPropertyBag
請參閱 持續性介面
IOleCache
IOleCache2
表示支援控件視覺效果的容器快取。 控件通常會透過 OLE 函數 CreateDataCache 取得快取支援本身。 只有具有有意義靜態內容的控件才應該選擇執行這項操作(雖然並非必要)。 如果控件完全支援快取,它應該只匯總數據快取,並從數據快取公開 IOleCacheIOleCache2 介面。 如果容器提供 IAdviseSink,實作 IOleObject 的控件必須能夠處理 IAdviseSink;在此情況下,控件可能無法確保它不會嘗試呼叫不存在的接收。
IExternal 連線 ion
表示控件支援本身的外部連結;也就是說,控件未標示為 OLEMISC_CANTLINKINSIDE,並支援 IOleObject::SetMonikerIOleObject::GetMoniker。 容器永遠不會查詢此介面本身,也不會直接呼叫它,因為呼叫是從 OLE 遠端層內部產生。
IRunnableObject
指出控件會區別載入與執行中,就像某些同進程對象一樣。

控制項