Servicetoewijzingsmacro'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 definiƫren servicetoewijzingen en vermeldingen.

Naam Description
BEGIN_SERVICE_MAP Hiermee wordt het begin van een ATL-servicetoewijzing gemarkeerd.
END_SERVICE_MAP Hiermee wordt het einde van een ATL-servicetoewijzing gemarkeerd.
SERVICE_ENTRY Geeft aan dat het object een specifieke service-id ondersteunt.
SERVICE_ENTRY_CHAIN Instrueert IServiceProviderImpl::QueryService om te koppelen aan het opgegeven object.

Requirements

Koptekst: atlcom.h

BEGIN_SERVICE_MAP

Hiermee wordt het begin van de servicetoewijzing gemarkeerd.

BEGIN_SERVICE_MAP(theClass)

Parameterwaarden

theClass
[in] Hiermee geeft u de klasse die de servicetoewijzing bevat.

Opmerkingen

Gebruik de servicetoewijzing om de functionaliteit van serviceproviders op uw COM-object te implementeren. Eerst moet u uw klas afleiden van IServiceProviderImpl. Er zijn twee typen vermeldingen:

Example

BEGIN_SERVICE_MAP(CMyService)
   SERVICE_ENTRY(SID_SBindHost)  // This object supports the SBindHost service
   SERVICE_ENTRY_CHAIN(m_spClientSite) // Everything else, just ask the container
END_SERVICE_MAP()

END_SERVICE_MAP

Hiermee wordt het einde van de servicetoewijzing gemarkeerd.

END_SERVICE_MAP()

Example

Zie het voorbeeld voor BEGIN_SERVICE_MAP.

SERVICE_ENTRY

Geeft aan dat het object de service-id ondersteunt die is opgegeven door SID.

SERVICE_ENTRY( SID )

Parameterwaarden

SID
De service-id.

Example

Zie het voorbeeld voor BEGIN_SERVICE_MAP.

SERVICE_ENTRY_CHAIN

Hiermee wordt IServiceProviderImpl::QueryService aan het object gekoppeld dat is opgegeven door punk.

SERVICE_ENTRY_CHAIN( punk )

Parameterwaarden

Punk
Een aanwijzer naar de IUnknown-interface waaraan moet worden gekoppeld.

Example

Zie het voorbeeld voor BEGIN_SERVICE_MAP.

IServiceProviderImpl::QueryService

Hiermee maakt of opent u de opgegeven service en retourneert u een interfaceaanwijzer naar de opgegeven interface voor de service.

STDMETHOD(QueryService)(
    REFGUID guidService,
    REFIID riid,
    void** ppvObject);

Parameterwaarden

guidService
[in] Wijs een service-id (SID) aan.

riid
[in] Id van de interface waartoe de aanroeper toegang moet krijgen.

ppvObj
[uit] Indirecte aanwijzer naar de aangevraagde interface.

Retourwaarde

Het geretourneerde HRESULT is een van de volgende waarden:

Retourwaarde Meaning
S_OK De service is gemaakt of opgehaald.
E_INVALIDARG Een of meer argumenten zijn ongeldig.
E_OUTOFMEMORY Geheugen is onvoldoende om de service te maken.
E_UNEXPECTED Er is een onbekende fout opgetreden.
E_NOINTERFACE De aangevraagde interface maakt geen deel uit van deze service of de service is onbekend.

Opmerkingen

QueryService retourneert een indirecte aanwijzer naar de aangevraagde interface in de opgegeven service. De beller is verantwoordelijk voor het vrijgeven van deze aanwijzer wanneer deze niet meer nodig is.

Wanneer u aanroept QueryService, geeft u zowel een service-id (guidService) als een interface-id (riid) door. De guidService geeft de service aan waartoe u toegang wilt en de riid identificeert een interface die deel uitmaakt van de service. Als resultaat ontvangt u een indirecte aanwijzer naar de interface.

Het object dat de interface implementeert, kan ook interfaces implementeren die deel uitmaken van andere services. Houd rekening met de volgende mogelijkheden:

  • Sommige van deze interfaces zijn mogelijk optioneel. Niet alle interfaces die in de servicebeschrijving zijn gedefinieerd, zijn noodzakelijkerwijs aanwezig bij elke implementatie van de service of op elk geretourneerd object.

  • In tegenstelling tot aan QueryInterfaceaanroepen betekent het doorgeven van een andere service-id niet noodzakelijkerwijs dat een ander COM-object (Component Object Model) wordt geretourneerd.

  • Het geretourneerde object heeft mogelijk andere interfaces die geen deel uitmaken van de definitie van de service.

Twee verschillende services, zoals SID_SMyService en SID_SYourService, kunnen beide het gebruik van dezelfde interface opgeven, ook al heeft de implementatie van de interface mogelijk niets gemeen tussen de twee services. Deze methode werkt omdat een aanroep naar QueryService (SID_SMyService, IID_IDispatch) een ander object kan retourneren dan QueryService (SID_SYourService, IID_IDispatch). Object-id wordt niet aangenomen wanneer u een andere service-id opgeeft.

Zie ook

Macro's