IServiceProviderImpl::QueryService
Crea o si accede al servizio specificato e restituisce un puntatore a interfaccia all'interfaccia specificata per il servizio.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
Parametri
[] WITHIN guidService
Puntatore a un identificatore di service (SID).[] WITHIN riid
Identificatore di interfaccia a cui il chiamante deve accedere.[FUORI] ppvObj
Puntatore indiretto all'interfaccia richiesta.
Valore restituito
Il valore restituito HRESULT è uno dei seguenti:
Valore restituito |
Significato |
---|---|
S_OK |
Il servizio è stato creato correttamente o recuperato stato. |
E_INVALIDARG |
Uno o più argomenti non sono validi. |
E_OUTOFMEMORY |
La memoria è insufficiente per creare il servizio. |
E_UNEXPECTED |
Errore sconosciuto. |
E_NOINTERFACE |
L'interfaccia richiesta non fanno parte di questo servizio, o il servizio è sconosciuto. |
Note
QueryService restituisce un puntatore indiretto all'interfaccia richiesta del servizio specificato.Il chiamante è responsabile del rilascio del puntatore quando non è più necessario.
Quando si chiama QueryService, sia passato un identificatore del servizio (guidService) che un identificatore di interfaccia (riid).guidService specifica il servizio a cui si desidera accedere e riid identifica un'interfaccia che fa parte del servizio.In cambio, si riceve un puntatore indiretto all'interfaccia.
L'oggetto che implementa l'interfaccia può inoltre implementare interfacce che fa parte di altri servizi.Si consideri quanto segue:
Alcune di queste interfacce potrebbero essere facoltative.Non tutte le interfacce definite nella descrizione del servizio sono necessariamente presenti in ogni implementazione del servizio o su ogni oggetto restituito.
A differenza delle chiamate a QueryInterface, passare un identificatore di servizio diverso non significa necessariamente che un oggetto diverso di Component Object Model (COM) viene restituito.
L'oggetto restituito potrebbe avere interfacce aggiuntive che non fanno parte della definizione del servizio.
Due diversi servizi, ad esempio SID_SMyService e SID_SYourService, è possibile specificare l'utilizzo della stessa interfaccia, anche se l'implementazione dell'interfaccia può essere eseguita in comune tra i due servizi.Questo metodo, poiché una chiamata a QueryService (SID_SMyService, IID_IDispatch) può restituire un oggetto diverso da QueryService (SID_SYourService, IID_IDispatch).L'identità dell'oggetto non è considerata quando si specifica un identificatore di servizio diverso.
Requisiti
Header: atlcom.h