Share via


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

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

  • [DEDANS] riid
    Identificateur de l'interface à laquelle l'appelant doit accéder.

  • [] ppvObj
    Pointeur indirect à l'interface demandée.

Valeur de retour

La valeur retournée d' HRESULT est l'une des opérations suivantes :

Valeur de retour

Signification

S_OK

Le service a été créé avec succès ou extrait.

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 n'est pas partie de ce service, ou le service est inconnu.

Notes

QueryService retourne un pointeur indirect à l'interface demandée au service spécifié.L'appelant est chargé de libérer ce pointeur lorsqu'il n'est plus requis.

Lorsque vous appelez QueryService, vous passez un identificateur de service (guidService) et un identificateur d'interface (riid).guidService spécifie le service auquel vous souhaitez accéder, et riid identifie une interface qui fait partie du service.En échange, vous obtenez un pointeur indirect à l'interface.

L'objet qui implémente l'interface peut également implémenter des interfaces qui font partie d'autres services.Vous devez tenir compte des éléments suivants :

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

  • Contrairement aux appels à QueryInterface, passer un identificateur différent de service ne signifie pas nécessairement qu'un autre objet de (COM) de modèle COM est retourné.

  • L'objet retourné peut avoir des interfaces supplémentaires qui ne font pas partie de la définition du service.

Deux services individuels, tels que SID_SMyService et SID_SYourService, peuvent spécifier l'utilisation de la même interface, bien que l'implémentation de l'interface peut n'avoir 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é de l'objet n'est pas assumée lorsque vous spécifiez un identificateur différent de service.

Configuration requise

Header: atlcom.h

Voir aussi

Référence

Classe d'IServiceProviderImpl

BEGIN_SERVICE_MAP