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 IServiceProviderImpl
klasy .
Elementy członkowskie
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 QueryService
metody 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. Rozważ następujące źródła:
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
QueryInterface
przekazywanie 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.