Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Följande bild visar relationen mellan de klasser och gränssnitt som används för att definiera ett ATL COM-objekt.
Anmärkning
Det här diagrammet visar som CComObject härleds från CYourClass medan CComAggObject och CComPolyObject inkluderar CYourClass som en medlemsvariabel.
Det finns tre sätt att definiera ett ATL COM-objekt. Standardalternativet är att använda klassen CComObject som härleds från CYourClass. Det andra alternativet är att skapa ett aggregerat objekt med hjälp CComAggObject av klassen . Det tredje alternativet är att använda CComPolyObject klassen .
CComPolyObject fungerar som en hybrid: den kan fungera som en CComObject klass eller som en CComAggObject klass, beroende på hur den först skapas. Mer information om hur du använder klassen finns i CComPolyObjectCComPolyObject-klass.
När du använder STANDARD ATL COM använder du två objekt: ett yttre objekt och ett inre objekt. Externa klienter kommer åt funktionerna i det inre objektet via de omslutningsfunktioner som definieras i det yttre objektet. Det yttre objektet är av typen CComObject.
När du använder ett aggregerat objekt tillhandahåller det yttre objektet inte höljen för funktionaliteten hos det inre objektet. I stället ger det yttre objektet en pekare som nås direkt av externa klienter. I det här scenariot är det yttre objektet av typen CComAggObject. Det inre objektet är en medlemsvariabel för det yttre objektet och det är av typen CYourClass.
Eftersom klienten inte behöver gå igenom det yttre objektet för att interagera med det inre objektet är aggregerade objekt vanligtvis mer effektiva. Dessutom behöver det yttre objektet inte känna till funktionerna i det aggregerade objektet, eftersom gränssnittet för det aggregerade objektet är direkt tillgängligt för klienten. Alla objekt kan dock inte aggregeras. För att ett objekt ska aggregeras måste det utformas med aggregering i åtanke.
ATL implementerar IUnknown i två faser:
CComObject, CComAggObject eller CComPolyObject implementerar
IUnknownmetoderna.CComObjectRoot eller CComObjectRootEx hanterar referensantalet och yttre pekare för
IUnknown.
Andra aspekter av DITT ATL COM-objekt hanteras av andra klasser:
CComCoClass definierar objektets standardklassfabrik och sammansättningsmodell.
IDispatchImpl tillhandahåller en standardimplementering av delen
IDispatch Interfaceav alla dubbla gränssnitt på objektet.ISupportErrorInfoImpl implementerar gränssnittet
ISupportErrorInfosom säkerställer att felinformation kan spridas korrekt i anropskedjan.
I det här avsnittet
Implementera CComObjectRootEx
Visa exempelmappningar för COM för att implementera CComObjectRootEx.
Implementera CComObject, CComAggObject och CComPolyObject
Beskriver hur DECLARE_*_AGGREGATABLE makron påverkar användningen av CComObject, CComAggObjectoch CComPolyObject.
Stöd för IDispatch och IErrorInfo
Visar en lista över de ATL-implementeringsklasser som ska användas för att stödja gränssnitten IDispatch och IErrorInfo .
Stöd för IDispEventImpl
Beskriver stegen för att implementera en anslutningspunkt för din klass.
Ändra standardklassfabriken och aggregeringsmodellen
Visa vilka makron som ska användas för att ändra standardklassfabriken och aggregeringsmodellen.
Skapa ett aggregerat objekt
Visar stegen för att skapa ett aggregerat objekt.
Relaterade avsnitt
Skapa ett ATL-projekt
Innehåller information om hur du skapar ett ATL COM-objekt.
ATL-
Innehåller länkar till konceptuella ämnen om hur du programmerar med hjälp av det aktiva mallbiblioteket.