Condividi tramite


Classe IServiceProviderImpl

Questa classe fornisce un'implementazione predefinita dell'interfaccia IServiceProvider .

Sintassi

template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider

Parametri

T
Classe derivata da IServiceProviderImpl.

Membri

Metodi pubblici

Nome Descrizione
IServiceProviderImpl::QueryService Crea o accede al servizio specificato e restituisce un puntatore di interfaccia all'interfaccia specificata per il servizio.

Osservazioni:

L'interfaccia IServiceProvider individua un servizio specificato dal RELATIVO GUID e restituisce il puntatore di interfaccia per l'interfaccia richiesta nel servizio. La classe IServiceProviderImpl fornisce un'implementazione predefinita di questa interfaccia.

IServiceProviderImpl specifica un metodo: QueryService, che crea o accede al servizio specificato e restituisce un puntatore di interfaccia all'interfaccia specificata per il servizio.

IServiceProviderImpl usa una mappa dei servizi, a partire da BEGIN_SERVICE_MAP e termina con END_SERVICE_MAP.

La mappa dei servizi contiene due voci: SERVICE_ENTRY, che indica un ID servizio (SID) specificato supportato dall'oggetto e SERVICE_ENTRY_CHAIN, che chiama QueryService per concatenare a un altro oggetto.

Gerarchia di ereditarietà

IServiceProvider

IServiceProviderImpl

Requisiti

Intestazione: atlcom.h

IServiceProviderImpl::QueryService

Crea o accede al servizio specificato e restituisce un puntatore di interfaccia all'interfaccia specificata per il servizio.

STDMETHOD(QueryService)(
    REFGUID guidService,
    REFIID riid,
    void** ppvObject);

Parametri

guidService
[in] Puntatore a un identificatore del servizio (SID).

riid
[in] Identificatore dell'interfaccia a cui il chiamante deve accedere.

ppvObj
[out] Puntatore indiretto all'interfaccia richiesta.

Valore restituito

Il valore HRESULT restituito è uno dei seguenti:

Valore restituito Significato
S_OK Il servizio è stato creato o recuperato correttamente.
E_INVALIDARG Uno o più argomenti non sono validi.
E_OUTOFMEMORY Memoria insufficiente per creare il servizio.
E_UNEXPECTED Si è verificato un errore sconosciuto.
E_NOINTERFACE L'interfaccia richiesta non fa parte di questo servizio o il servizio è sconosciuto.

Osservazioni:

QueryService restituisce un puntatore indiretto all'interfaccia richiesta nel servizio specificato. Il chiamante è responsabile del rilascio di questo puntatore quando non è più necessario.

Quando si chiama QueryService, si passa sia un identificatore del servizio (guidService) che un identificatore di interfaccia (riid). Il guidService specifica il servizio a cui si vuole accedere e il riid identifica un'interfaccia che fa parte del servizio. In cambio, si riceve un puntatore indiretto all'interfaccia.

L'oggetto che implementa l'interfaccia potrebbe implementare anche interfacce che fanno parte di altri servizi. Considerare 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 in ogni oggetto restituito.

  • A differenza delle chiamate a QueryInterface, il passaggio di un identificatore di servizio diverso non significa necessariamente che venga restituito un oggetto COM (Component Object Model) diverso.

  • L'oggetto restituito potrebbe avere interfacce aggiuntive che non fanno parte della definizione del servizio.

Due servizi diversi, ad esempio SID_SMyService e SID_SYourService, possono entrambi specificare l'uso della stessa interfaccia, anche se l'implementazione dell'interfaccia potrebbe non avere nulla in comune tra i due servizi. Questa operazione funziona perché una chiamata a QueryService (SID_SMyService, IID_IDispatch) può restituire un oggetto diverso da QueryService (SID_SYourService, IID_IDispatch). L'identità dell'oggetto non viene presupposta quando si specifica un identificatore di servizio diverso.

Vedi anche

Cenni preliminari sulla classe