Sdílet prostřednictvím


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.

Diagram tříd a rozhraní používaných k definování objektu A T L

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:

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í , CComObjectCComAggObjecta 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.

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.

Viz také

Koncepty