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. Tenez compte des é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.