控制和控制容器指導方針的概觀
ActiveX 控制件基本上是支援 IUnknown 介面的簡單 OLE 物件。 它通常會支援更多介面以提供功能,但所有其他介面可能會視為選擇性,因此,控件容器不應依賴所支援的任何其他介面。 若未指定控件必須支援的其他介面,控件可能會有效率地以特定功能區域為目標,而不需要支援特定介面來限定為控件。 與 OLE 一樣,無論是在控件或控件容器中,都不應該假設介面可供使用,而且應該一律遵循標準傳回檢查慣例。 控件或控件容器必須正常降級,並在無法使用介面時提供替代功能。
ActiveX 控件容器必須能夠裝載最少的 ActiveX 控制件;它也支援一些額外的介面,如容器中所指定。 容器可以選擇性地支援許多介面和方法,這些介面和方法會分成稱為 元件類別的功能區域。 容器可支援元件類別的任何組合,例如,數據系結的元件類別存在,而容器可能或可能不支持數據系結功能,視容器的市場需求而定。 如果控件需要容器的數據系結支援才能運作,則會在登錄中輸入這項需求。 這可讓控件容器只提供插入它知道可以成功裝載的控件。 請務必注意,元件類別會指定為 OLE 的一部分,而且不是 ActiveX 控件特有的,控件架構會使用元件類別來識別 OLE 元件可能支援的功能區域。 元件類別不是累積或獨佔,因此控件容器可以支援一個類別,而不一定支援另一個類別。
對於需要選擇性功能的控件,或特定容器特有的功能,請務必清楚封裝及行銷這些需求。 同樣地,提供特定功能或元件類別的容器必須在裝載 ActiveX 控件時行銷和封裝為提供這些層級的支援。 如果介面或方法無法使用,建議使用盡可能多的容器控制及測試,並正常降級以提供較少或替代功能。 在沒有元件類別支持的情況下,控件無法執行其指定的作業函式,該類別應該在登錄中輸入為需求,以防止控件插入不適當的容器中。
這些指導方針會定義控件可能需要控件容器支援的這些介面和方法,不過如同一般,當使用 QueryInterface 或其他方法來取得這些介面的指標時,控件應該檢查傳回值。 容器不應該預期控件支援比 IUnknown 介面更多的專案,這些指導方針會識別控件可能支援哪些介面,以及特定介面是否存在的意義。
為什麼 ActiveX 控制容器指導方針很重要
ActiveX 控制件已成為開發可程式化軟體元件的主要架構,可用於各種不同的容器,範圍從軟體開發工具到用戶生產力工具。 為了讓控件在各種容器中運作良好,控件必須能夠假設它可以在所有容器中依賴的一些最低層級功能。
遵循這些指導方針,控件和容器開發人員會讓其控件和容器更可靠且互通,最後更好且更可用元件來建置元件型解決方案。
當您需要的介面無法使用時,該怎麼辦
OLE 程式應該使用 QueryInterface 來取得介面指標,而且必須檢查傳回值。 OLE 應用程式無法安全地假設 QueryInterface 會成功。
此需求適用於所有 OLE 應用程式。 如果要求的介面無法使用(也就是 QueryInterface 傳回E_NOINTERFACE),則控件或容器必須正常降級,即使這表示它無法執行其指定的作業函式。
相關主題