Share via


COM_INTERFACE_ENTRY macro's

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze macro's voeren de interfaces van een object in de COM-kaart in, zodat ze toegankelijk zijn voor QueryInterface. De volgorde van vermeldingen in de COM-kaart is dat de orderinterfaces tijdens een overeenkomende IID QueryInterfaceworden gecontroleerd.

Macroniveau Description
COM_INTERFACE_ENTRY Hiermee worden interfaces ingevoerd in de COM-interfacekaart.
COM_INTERFACE_ENTRY2 Gebruik deze macro om twee vertakkingen van overname te ontkoppelen.
COM_INTERFACE_ENTRY_IID Gebruik deze macro om de interface in de COM-kaart in te voeren en de BIJBEHORENDE IID op te geven.
COM_INTERFACE_ENTRY2_IID Hetzelfde als COM_INTERFACE_ENTRY2, behalve dat u een andere IID kunt opgeven.
COM_INTERFACE_ENTRY_AGGREGATE Wanneer de interface die wordt geïdentificeerd door iid wordt opgevraagd, COM_INTERFACE_ENTRY_AGGREGATE wordt doorgestuurd naar punk.
COM_INTERFACE_ENTRY_AGGREGATE_BLIND Hetzelfde als COM_INTERFACE_ENTRY_AGGREGATE, behalve dat het uitvoeren van query's voor IID resulteert in het doorsturen van de query naar punk.
COM_INTERFACE_ENTRY_AUTOAGGREGATE Hetzelfde als COM_INTERFACE_ENTRY_AGGREGATE, behalve als punk NULL is, wordt automatisch de statistische waarde gemaakt die wordt beschreven door de clsid.
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND Hetzelfde als COM_INTERFACE_ENTRY_AUTOAGGREGATE, behalve dat het uitvoeren van query's voor IID resulteert in het doorsturen van de query naar punk, en als punk NULL is, wordt automatisch de statistische waarde gemaakt die wordt beschreven door de clsid.
COM_INTERFACE_ENTRY_BREAK Zorgt ervoor dat uw programma DebugBreak aanroept wanneer de opgegeven interface wordt opgevraagd.
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF Slaat de interfacespecifieke gegevens voor elk exemplaar op.
COM_INTERFACE_ENTRY_TEAR_OFF Hiermee worden uw losloopinterfaces weergegeven.
COM_INTERFACE_ENTRY_CHAIN Hiermee wordt de COM-kaart van de basisklasse verwerkt wanneer de verwerking deze vermelding in de COM-kaart bereikt.
COM_INTERFACE_ENTRY_FUNC Een algemeen mechanisme voor het koppelen aan de logica van QueryInterface ATL.
COM_INTERFACE_ENTRY_FUNC_BLIND Hetzelfde als COM_INTERFACE_ENTRY_FUNC, behalve dat het uitvoeren van query's op IID resulteert in een aanroep naar func.
COM_INTERFACE_ENTRY_NOINTERFACE Retourneert E_NOINTERFACE en beëindigt com-toewijzingsverwerking wanneer de opgegeven interface wordt opgevraagd.

Requirements

Koptekst: atlcom.h

COM_INTERFACE_ENTRY

Hiermee worden interfaces ingevoerd in de COM-interfacekaart.

Syntaxis

COM_INTERFACE_ENTRY( x )

Parameterwaarden

x
[in] De naam van een interface waarvan uw klasseobject rechtstreeks is afgeleid.

Opmerkingen

Dit is meestal het invoertype dat u het vaakst gebruikt.

Example

BEGIN_COM_MAP(CThisExample)
   COM_INTERFACE_ENTRY(IThisExample)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

Requirements

Koptekst: atlcom.h

COM_INTERFACE_ENTRY2

Gebruik deze macro om twee vertakkingen van overname te ontkoppelen.

COM_INTERFACE_ENTRY2(x, x2)

Parameterwaarden

x
[in] De naam van een interface die u wilt weergeven vanuit uw object.

x2
[in] De naam van de overnamebranch waaruit x wordt weergegeven.

Opmerkingen

Als u uw klasseobject bijvoorbeeld afleidt van twee dubbele interfaces, kunt u deze beschikbaar IDispatch maken met behulp van COM_INTERFACE_ENTRY2, omdat IDispatch u deze kunt verkrijgen via een van de interfaces.

Example

class ATL_NO_VTABLE CEntry2Example :
   public CEntry2ExampleBase, // CEntry2ExampleBase derives from IDispatch
   public IDispatchImpl<IEntry2Example, &IID_IEntry2Example, &LIBID_NVC_ATL_WindowingLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
   public CComCoClass<CEntry2Example, &CLSID_Entry2Example>
{
public:
   CEntry2Example()
   {
   }

BEGIN_COM_MAP(CEntry2Example)
   COM_INTERFACE_ENTRY(IEntry2Example)
   COM_INTERFACE_ENTRY2(IDispatch, IEntry2Example)
END_COM_MAP()
};

COM_INTERFACE_ENTRY_IID

Gebruik deze macro om de interface in de COM-kaart in te voeren en de BIJBEHORENDE IID op te geven.

COM_INTERFACE_ENTRY_IID(iid, x)

Parameterwaarden

iid
[in] De GUID van de interface die wordt weergegeven.

x
[in] De naam van de klasse waarvan de vtable wordt weergegeven als de interface die wordt geïdentificeerd door iid.

Example

BEGIN_COM_MAP(CExample)
   COM_INTERFACE_ENTRY(IExample)
   COM_INTERFACE_ENTRY_IID(IID_IDispatch, CExampleDispatch)
   COM_INTERFACE_ENTRY(IExampleBase)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

COM_INTERFACE_ENTRY2_IID

Hetzelfde als COM_INTERFACE_ENTRY2, behalve dat u een andere IID kunt opgeven.

COM_INTERFACE_ENTRY2_IID(iid, x, x2)

Parameterwaarden

iid
[in] De GUID die u opgeeft voor de interface.

x
[in] De naam van een interface waarvan uw klasseobject rechtstreeks is afgeleid.

x2
[in] De naam van een tweede interface waarvan uw klasseobject rechtstreeks is afgeleid.

COM_INTERFACE_ENTRY_AGGREGATE

Wanneer de interface die wordt geïdentificeerd door iid wordt opgevraagd, wordt COM_INTERFACE_ENTRY_AGGREGATE doorgestuurd naar punk.

COM_INTERFACE_ENTRY_AGGREGATE(iid, punk)

Parameterwaarden

iid
[in] De GUID van de interface waarvoor een query is uitgevoerd.

Punk
[in] De naam van een IUnknown aanwijzer.

Opmerkingen

De parameter punk wordt ervan uitgegaan dat deze verwijst naar de binnenste onbekende waarde van een aggregaties of null, in welk geval de vermelding wordt genegeerd. Normaal gesproken zou CoCreate u de aggregaties in FinalConstruct.

Example

BEGIN_COM_MAP(COuter1)
   COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IAgg), m_punkAgg)
END_COM_MAP()

COM_INTERFACE_ENTRY_AGGREGATE_BLIND

Hetzelfde als COM_INTERFACE_ENTRY_AGGREGATE, behalve dat het uitvoeren van query's voor IID resulteert in het doorsturen van de query naar punk.

COM_INTERFACE_ENTRY_AGGREGATE_BLIND(punk)

Parameterwaarden

Punk
[in] De naam van een IUnknown aanwijzer.

Opmerkingen

Als de interfacequery mislukt, wordt de verwerking van de COM-kaart voortgezet.

Example

BEGIN_COM_MAP(COuter2)
   COM_INTERFACE_ENTRY_AGGREGATE_BLIND(m_punkAggBlind)
END_COM_MAP()

COM_INTERFACE_ENTRY_AUTOAGGREGATE

Hetzelfde als COM_INTERFACE_ENTRY_AGGREGATE, behalve als punk NULL is, wordt automatisch de statistische waarde gemaakt die wordt beschreven door de clsid.

COM_INTERFACE_ENTRY_AUTOAGGREGATE(iid, punk, clsid)

Parameterwaarden

iid
[in] De GUID van de interface waarvoor een query is uitgevoerd.

Punk
[in] De naam van een IUnknown aanwijzer. Moet lid zijn van de klasse die de COM-kaart bevat.

clsid
[in] De id van de statistische waarde die wordt gemaakt als punk NULL is.

Opmerkingen

Example

BEGIN_COM_MAP(COuter3)
   COM_INTERFACE_ENTRY_AUTOAGGREGATE(__uuidof(IAutoAgg), m_punkAutoAgg, CLSID_CAutoAgg)
END_COM_MAP()

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND

Hetzelfde als COM_INTERFACE_ENTRY_AUTOAGGREGATE, behalve dat het uitvoeren van query's voor IID resulteert in het doorsturen van de query naar punk, en als punk NULL is, wordt automatisch de statistische waarde gemaakt die wordt beschreven door de clsid.

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(punk, clsid)

Parameterwaarden

Punk
[in] De naam van een IUnknown aanwijzer. Moet lid zijn van de klasse die de COM-kaart bevat.

clsid
[in] De id van de statistische waarde die wordt gemaakt als punk NULL is.

Opmerkingen

Als de interfacequery mislukt, wordt de verwerking van de COM-kaart voortgezet.

Example

BEGIN_COM_MAP(COuter4)
   COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(m_punkAutoAggB, CLSID_CAutoAggB)
END_COM_MAP()

COM_INTERFACE_ENTRY_BREAK

Zorgt ervoor dat uw programma DebugBreak aanroept wanneer de opgegeven interface wordt opgevraagd.

COM_INTERFACE_ENTRY_BREAK(x)

Parameterwaarden

x
[in] Tekst die wordt gebruikt om de interface-id samen te stellen.

Opmerkingen

De interface IID wordt samengesteld door x toe te voegen aan IID_. Als x bijvoorbeeld is IPersistStorage, is IID_IPersistStoragede IID.

COM_INTERFACE_ENTRY_CACHED_TEAR_OFF

Slaat de interfacespecifieke gegevens voor elk exemplaar op.

COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(iid, x, punk)

Parameterwaarden

iid
[in] De GUID van de losloopinterface.

x
[in] De naam van de klasse die de interface implementeert.

Punk
[in] De naam van een IUnknown aanwijzer. Moet lid zijn van de klasse die de COM-kaart bevat. Moet worden geïnitialiseerd naar NULL in de constructor van het klasseobject.

Opmerkingen

Als de interface niet wordt gebruikt, wordt hierdoor de totale instantiegrootte van uw object verlaagd.

Example

BEGIN_COM_MAP(COuter)
   COM_INTERFACE_ENTRY(IOuter)
   COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(IID_ITearOff, CTearOff, punkTearOff)
END_COM_MAP()

COM_INTERFACE_ENTRY_TEAR_OFF

Hiermee worden uw losloopinterfaces weergegeven.

COM_INTERFACE_ENTRY_TEAR_OFF(iid, x)

Parameterwaarden

iid
[in] De GUID van de losloopinterface.

x
[in] De naam van de klasse die de interface implementeert.

Opmerkingen

Een losgekoppelde interface wordt geïmplementeerd als een afzonderlijk object dat wordt geïnstantieerd telkens wanneer de interface wordt aangegeven waarvoor een query wordt uitgevoerd. Normaal gesproken bouwt u uw interface als een scheur als de interface zelden wordt gebruikt, omdat hiermee een vtable-aanwijzer wordt opgeslagen in elk exemplaar van uw hoofdobject. De scheur wordt verwijderd wanneer het aantal verwijzingen nul wordt. De klasse waarmee de scheur wordt geïmplementeerd, moet worden afgeleid van CComTearOffObjectBase en een eigen COM-kaart hebben.

Example

BEGIN_COM_MAP(CBeeper)
   COM_INTERFACE_ENTRY(IBeeper)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()

COM_INTERFACE_ENTRY_CHAIN

Hiermee wordt de COM-kaart van de basisklasse verwerkt wanneer de verwerking deze vermelding in de COM-kaart bereikt.

COM_INTERFACE_ENTRY_CHAIN(classname)

Parameterwaarden

klassenaam
[in] Een basisklasse van het huidige object.

Opmerkingen

Bijvoorbeeld in de volgende code:

BEGIN_COM_MAP(COuterObject)
   COM_INTERFACE_ENTRY2(IDispatch, IOuterObject)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()

Houd er rekening mee dat de eerste vermelding in de COM-kaart een interface moet zijn voor het object dat de COM-kaart bevat. U kunt de COM-kaartvermeldingen dus niet starten met COM_INTERFACE_ENTRY_CHAIN, waardoor de COM-kaart van een ander object wordt doorzocht op het punt waarop COM_INTERFACE_ENTRY_CHAIN(COtherObject) wordt weergegeven in de COM-kaart van uw object. Als u eerst de COM-kaart van een ander object wilt doorzoeken, voegt u eerst een interfacevermelding voor IUnknown uw COM-kaart toe en koppelt u de COM-kaart van het andere object. Voorbeeld:

BEGIN_COM_MAP(CThisObject)
   COM_INTERFACE_ENTRY(IUnknown)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()

COM_INTERFACE_ENTRY_FUNC

Een algemeen mechanisme voor het koppelen aan de logica van QueryInterface ATL.

COM_INTERFACE_ENTRY_FUNC(iid, dw, func)

Parameterwaarden

iid
[in] De GUID van de interface die wordt weergegeven.

Dw
[in] Een parameter doorgegeven aan de func.

func
[in] De functie-aanwijzer die iid retourneert.

Opmerkingen

Als iid overeenkomt met de IID van de interface waarvoor een query wordt uitgevoerd, wordt de functie die is opgegeven door func , aangeroepen. De declaratie voor de functie moet zijn:

HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw);

Wanneer uw functie wordt aangeroepen, pv verwijst u naar het klasseobject. De riid-parameter verwijst naar de interface waarvoor een query wordt uitgevoerd, ppv is de aanwijzer naar de locatie waar de functie de aanwijzer naar de interface moet opslaan en dw is de parameter die u hebt opgegeven in de vermelding. De functie moet * ppv instellen op NULL en E_NOINTERFACE of S_FALSE retourneren als er geen interface wordt geretourneerd. Met E_NOINTERFACE wordt de verwerking van COM-kaarten beëindigd. Met S_FALSE wordt com-kaartverwerking voortgezet, ook al is er geen interfacepointer geretourneerd. Als de functie een interfaceaanwijzer retourneert, moet deze S_OK retourneren.

COM_INTERFACE_ENTRY_FUNC_BLIND

Hetzelfde als COM_INTERFACE_ENTRY_FUNC, behalve dat het uitvoeren van query's op IID resulteert in een aanroep naar func.

COM_INTERFACE_ENTRY_FUNC_BLIND(dw, func)

Parameterwaarden

Dw
[in] Een parameter doorgegeven aan de func.

func
[in] De functie die wordt aangeroepen wanneer deze vermelding in de COM-kaart wordt verwerkt.

Opmerkingen

Als er een fout optreedt, wordt de verwerking voortgezet op de COM-kaart. Als de functie een interfaceaanwijzer retourneert, moet deze S_OK retourneren.

COM_INTERFACE_ENTRY_NOINTERFACE

Retourneert E_NOINTERFACE en beëindigt com-toewijzingsverwerking wanneer de opgegeven interface wordt opgevraagd.

COM_INTERFACE_ENTRY_NOINTERFACE(x)

Parameterwaarden

x
[in] Tekst die wordt gebruikt om de interface-id samen te stellen.

Opmerkingen

U kunt deze macro gebruiken om te voorkomen dat een interface in een bepaald geval wordt gebruikt. U kunt deze macro bijvoorbeeld direct invoegen in uw COM-kaart voordat COM_INTERFACE_ENTRY_AGGREGATE_BLIND om te voorkomen dat een query voor de interface wordt doorgestuurd naar de interne onbekende aggregaties.

De interface IID wordt samengesteld door x toe te voegen aan IID_. Als x bijvoorbeeld is IPersistStorage, is IID_IPersistStoragede IID.