Základy ATL – objekty COM
Následující obrázek znázorňuje vztah mezi třídami a rozhraními, které se používají k definování objektu MODELU COM ATL.
Poznámka:
Tento diagram znázorňuje, že je odvozen z toho, CComObject
kdežto CComAggObject
a CComPolyObject
zahrnuje CYourClass
jako členovou proměnnou.CYourClass
Existují tři způsoby definování objektu COM ATL. Standardní možností je použít CComObject
třídu, která je odvozena z CYourClass
. Druhou možností je vytvořit agregovaný objekt pomocí CComAggObject
třídy. Třetí možností je použít CComPolyObject
třídu. CComPolyObject
funguje jako hybridní: může fungovat jako CComObject
třída nebo jako CComAggObject
třída v závislosti na tom, jak se poprvé vytvoří. Další informace o použití CComPolyObject
třídy naleznete v tématu CComPolyObject Třída.
Při použití standardního objektu ATL COM použijete dva objekty: vnější objekt a vnitřní objekt. Externí klienti přistupují k funkcím vnitřního objektu prostřednictvím funkcí obálky, které jsou definovány ve vnějším objektu. Vnější objekt je typu CComObject
.
Pokud používáte agregovaný objekt, vnější objekt neposkytuje obálky pro funkce vnitřního objektu. Místo toho vnější objekt poskytuje ukazatel, který je přímo přístupný externími klienty. V tomto scénáři je vnější objekt typu CComAggObject
. Vnitřní objekt je členová proměnná vnějšího objektu a je typu CYourClass
.
Vzhledem k tomu, že klient nemusí projít vnějším objektem pro interakci s vnitřním objektem, agregované objekty jsou obvykle efektivnější. Vnější objekt také nemusí znát funkce agregovaného objektu, protože rozhraní agregovaného objektu je přímo dostupné klientovi. Ne všechny objekty se ale dají agregovat. Aby se objekt agregoval, musí být navržen s ohledem na agregaci.
ATL implementuje IUnknown ve dvou fázích:
CComObject, CComAggObject nebo CComPolyObject implementuje
IUnknown
metody.CComObjectRoot nebo CComObjectRootEx spravuje počet odkazů a vnější ukazatele .
IUnknown
Další aspekty objektu COM ATL jsou zpracovávány jinými třídami:
CComCoClass definuje výchozí objekt třídy factory a agregační model.
IDispatchImpl poskytuje výchozí implementaci
IDispatch Interface
části všech duálních rozhraní na objektu.ISupportErrorInfoImpl implementuje
ISupportErrorInfo
rozhraní, které zajišťuje, že informace o chybě lze rozšířit do řetězu volání správně.
V tomto oddílu
Implementace CComObjectRootEx
Zobrazit ukázkové položky mapování modelu COM pro implementaci CComObjectRootEx
.
Implementace CComObject, CComAggObject a CComPolyObject
Popisuje, jak DECLARE_*_AGGREGATABLE makra ovlivňují použití , CComObject
CComAggObject
a CComPolyObject
.
Podpora IDispatch a IErrorInfo
Uvádí třídy implementace ATL, které se mají použít pro podporu IDispatch
rozhraní a IErrorInfo
rozhraní.
Podpora IDispEventImpl
Popisuje kroky implementace spojovacího bodu pro vaši třídu.
Změna výchozího objektu pro vytváření tříd a agregačního modelu
Umožňuje zobrazit makra, která se mají použít ke změně výchozího modelu vytváření tříd a agregace.
Vytvoření agregovaného objektu
Zobrazí seznam kroků pro vytvoření agregovaného objektu.
Související oddíly
Vytvoření projektu ATL
Poskytuje informace o vytvoření objektu COM ATL.
ATL
Obsahuje odkazy na koncepční témata o tom, jak programovat pomocí knihovny aktivní šablony.