Partager via


Macros de mappage de services

Ces macros définissent des mappages de service et des entrées.

Nom Description
BEGIN_SERVICE_MAP Marque le début d’une carte de service ATL.
END_SERVICE_MAP Marque la fin d’une carte de service ATL.
SERVICE_ENTRY Indique que l’objet prend en charge un ID de service spécifique.
SERVICE_ENTRY_CHAIN Indique à IServiceProviderImpl ::QueryService de chaîner l’objet spécifié.

Spécifications

En-tête : atlcom.h

BEGIN_SERVICE_MAP

Marque le début de la carte de service.

BEGIN_SERVICE_MAP(theClass)

Paramètres

theClass
[in] Spécifie la classe contenant le mappage de service.

Notes

Utilisez la carte de service pour implémenter des fonctionnalités de fournisseur de services sur votre objet COM. Tout d’abord, vous devez dériver votre classe de IServiceProviderImpl. Il existe deux types d’entrées :

Exemple

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

Marque la fin de la carte de service.

END_SERVICE_MAP()

Exemple

Consultez l’exemple de BEGIN_SERVICE_MAP.

SERVICE_ENTRY

Indique que l’objet prend en charge l’ID de service spécifié par SID.

SERVICE_ENTRY( SID )

Paramètres

SID
ID de service.

Exemple

Consultez l’exemple de BEGIN_SERVICE_MAP.

SERVICE_ENTRY_CHAIN

Indique à IServiceProviderImpl ::QueryService de chaîner l’objet spécifié par punk.

SERVICE_ENTRY_CHAIN( punk )

Paramètres

Punk
Pointeur vers l’interface IUnknown vers laquelle chaîner.

Exemple

Consultez l’exemple de BEGIN_SERVICE_MAP.

IServiceProviderImpl ::QueryService

Crée ou accède au service spécifié et retourne un pointeur d’interface vers l’interface spécifiée pour le service.

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

Paramètres

guidService
[in] Pointeur vers un identificateur de service (SID).

riid
[in] Identificateur de l’interface à laquelle l’appelant doit accéder.

ppvObj
[out] Pointeur indirect vers l’interface demandée.

Valeur de retour

HrESULT retourné est l’une des valeurs suivantes :

Valeur retournée Signification
S_OK Le service a été correctement créé ou récupéré.
E_INVALIDARG Un ou plusieurs arguments ne sont pas valides.
E_OUTOFMEMORY La mémoire est insuffisante pour créer le service.
E_UNEXPECTED Une erreur inconnue s’est produite.
E_NOINTERFACE L’interface demandée ne fait pas partie de ce service, ou le service est inconnu.

Notes

QueryService retourne un pointeur indirect vers l’interface demandée dans le service spécifié. L’appelant est chargé de libérer ce pointeur lorsqu’il n’est plus nécessaire.

Lorsque vous appelez QueryService, vous passez à la fois un identificateur de service (guidService) et un identificateur d’interface (riid). GuidService spécifie le service auquel vous souhaitez accéder, et le riid identifie une interface qui fait partie du service. En retour, vous recevez un pointeur indirect vers l’interface.

L’objet qui implémente l’interface peut également implémenter des interfaces qui font partie d’autres services. Tenez compte des possibilités suivantes :

  • Certaines de ces interfaces peuvent être facultatives. Toutes les interfaces définies dans la description du service ne sont pas nécessairement présentes sur chaque implémentation du service ou sur chaque objet retourné.

  • Contrairement aux appels à QueryInterface, le passage d’un identificateur de service différent ne signifie pas nécessairement qu’un objet COM (Component Object Model) différent est retourné.

  • L’objet retourné peut avoir d’autres interfaces qui ne font pas partie de la définition du service.

Deux services différents, tels que SID_SMyService et SID_SYourService, peuvent tous deux spécifier l’utilisation de la même interface, même si l’implémentation de l’interface n’a peut-être rien en commun entre les deux services. Cette approche fonctionne, car un appel à QueryService (SID_SMyService, IID_IDispatch) peut retourner un objet QueryService différent de (SID_SYourService, IID_IDispatch). L’identité d’objet n’est pas supposée lorsque vous spécifiez un autre identificateur de service.

Voir aussi

Macros