Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de 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 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:
SERVICE_ENTRY Geeft ondersteuning aan voor de opgegeven service-id (SID).
SERVICE_ENTRY_CHAIN Instrueert IServiceProviderImpl::QueryService om te koppelen aan een ander, opgegeven object.
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.