Udostępnij za pośrednictwem


Klasa IServiceProviderImpl

Ta klasa zapewnia domyślną implementację interfejsu IServiceProvider .

Składnia

template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider

Parametry

T
Klasa pochodząca z IServiceProviderImplklasy .

Członkowie

Metody publiczne

Nazwa/nazwisko opis
IServiceProviderImpl::QueryService Tworzy lub uzyskuje dostęp do określonej usługi i zwraca wskaźnik interfejsu do określonego interfejsu dla usługi.

Uwagi

Interfejs IServiceProvider lokalizuje usługę określoną przez jego identyfikator GUID i zwraca wskaźnik interfejsu dla żądanego interfejsu w usłudze. Klasa IServiceProviderImpl udostępnia domyślną implementację tego interfejsu.

IServiceProviderImpl Określa jedną metodę: QueryService, która tworzy określoną usługę lub uzyskuje do nich dostęp i zwraca wskaźnik interfejsu do określonego interfejsu dla usługi.

IServiceProviderImpl używa mapy usługi, począwszy od BEGIN_SERVICE_MAP i kończącej się END_SERVICE_MAP.

Mapa usługi zawiera dwa wpisy: SERVICE_ENTRY, który wskazuje określony identyfikator usługi (SID) obsługiwany przez obiekt i SERVICE_ENTRY_CHAIN, który wywołuje QueryService łańcuch do innego obiektu.

Hierarchia dziedziczenia

IServiceProvider

IServiceProviderImpl

Wymagania

Nagłówek: atlcom.h

IServiceProviderImpl::QueryService

Tworzy lub uzyskuje dostęp do określonej usługi i zwraca wskaźnik interfejsu do określonego interfejsu dla usługi.

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

Parametry

guidService
[in] Wskaźnik do identyfikatora usługi (SID).

Riid
[in] Identyfikator interfejsu, do którego obiekt wywołujący ma uzyskać dostęp.

ppvObj
[out] Wskaźnik pośredni do żądanego interfejsu.

Wartość zwracana

Zwrócona wartość HRESULT jest jedną z następujących wartości:

Wartość zwracana Znaczenie
S_OK Usługa została pomyślnie utworzona lub pobrana.
E_INVALIDARG Co najmniej jeden argument jest nieprawidłowy.
E_OUTOFMEMORY Ilość pamięci jest niewystarczająca do utworzenia usługi.
E_UNEXPECTED Wystąpił nieznany błąd.
E_NOINTERFACE Żądany interfejs nie jest częścią tej usługi lub usługa jest nieznana.

Uwagi

QueryService Zwraca wskaźnik pośredni do żądanego interfejsu w określonej usłudze. Obiekt wywołujący jest odpowiedzialny za zwolnienie tego wskaźnika, gdy nie jest już wymagany.

Podczas wywoływania QueryServicemetody należy przekazać zarówno identyfikator usługi (guidService), jak i identyfikator interfejsu (riid). GuidService określa usługę, do której chcesz uzyskać dostęp, a riid identyfikuje interfejs, który jest częścią usługi. W zamian otrzymasz wskaźnik pośredni do interfejsu.

Obiekt, który implementuje interfejs, może również implementować interfejsy, które są częścią innych usług. Zaleca się uwzględnić następujące elementy:

  • Niektóre z tych interfejsów mogą być opcjonalne. Nie wszystkie interfejsy zdefiniowane w opisie usługi muszą być obecne w każdej implementacji usługi lub na każdym zwracanym obiekcie.

  • W przeciwieństwie do wywołań metody QueryInterfaceprzekazywanie innego identyfikatora usługi nie musi oznaczać, że zwracany jest inny obiekt modelu obiektów składników (COM).

  • Zwrócony obiekt może mieć dodatkowe interfejsy, które nie są częścią definicji usługi.

Dwie różne usługi, takie jak SID_SMyService i SID_SYourService, mogą określać użycie tego samego interfejsu, mimo że implementacja interfejsu może mieć nic wspólnego między tymi dwoma usługami. Działa to, ponieważ wywołanie metody QueryService (SID_SMyService, IID_IDispatch) może zwrócić inny obiekt niż QueryService (SID_SYourService, IID_IDispatch). Tożsamość obiektu nie jest zakładana podczas określania innego identyfikatora usługi.

Zobacz też

Omówienie klasy