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