Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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.