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

Vedere anche

Riferimenti

Classe di IServiceProviderImpl

BEGIN_SERVICE_MAP