Partager via


IServiceProviderImpl, classe

Cette classe fournit une implémentation par défaut de l’interface IServiceProvider .

Syntaxe

template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider

Paramètres

T
Votre classe, dérivée de IServiceProviderImpl.

Membres

Méthodes publiques

Nom Description
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.

Notes

L’interface IServiceProvider localise un service spécifié par son GUID et retourne le pointeur d’interface pour l’interface demandée sur le service. La classe IServiceProviderImpl fournit une implémentation par défaut de cette interface.

IServiceProviderImpl spécifie une méthode : QueryService, qui crée ou accède au service spécifié et retourne un pointeur d’interface vers l’interface spécifiée pour le service.

IServiceProviderImpl utilise une carte de service, commençant par BEGIN_SERVICE_MAP et se terminant par END_SERVICE_MAP.

Le mappage de service contient deux entrées : SERVICE_ENTRY, qui indique un ID de service (SID) spécifié pris en charge par l’objet et SERVICE_ENTRY_CHAIN, qui appelle QueryService la chaîne à un autre objet.

Hiérarchie d'héritage

IServiceProvider

IServiceProviderImpl

Spécifications

En-tête : atlcom.h

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

La valeur HRESULT retournée est l’une des 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. Prenez en compte les éléments suivants :

  • 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 vers 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 des interfaces supplémentaires 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. Cela fonctionne, car un appel à QueryService (SID_SMyService, IID_IDispatch) peut retourner un objet différent de QueryService (SID_SYourService, IID_IDispatch). L’identité d’objet n’est pas supposée lorsque vous spécifiez un autre identificateur de service.

Voir aussi

Vue d’ensemble de la classe