IServiceProviderImpl::QueryService
Tworzy lub uzyskuje dostęp do określonej usługi i zwraca do określonego interfejsu usługi wskaźnika interfejsu.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
Parametry
[W]guidService
Wskaźnik do identyfikatora usługi (SID).[W]riid
Identyfikator interfejsu, do którego rozmówca dostęp.[OUT]ppvObj
Pośredni wskaźnik do żądanego interfejsu.
Wartość zwracana
Zwrócony HRESULT wartość jest jedną z następujących czynności:
Zwracana wartość |
Znaczenie |
---|---|
S_OK |
Usługa została pomyślnie utworzone lub pobrane. |
WARTOŚĆ E_INVALIDARG |
Jeden lub więcej argumentów jest nieprawidłowy. |
E_OUTOFMEMORY |
Pamięci jest niewystarczająca utworzyć usługa. |
E_UNEXPECTED |
Wystąpił nieznany błąd. |
E_NOINTERFACE |
Żądany interfejs nie jest częścią tej usługi lub usługi jest nieznany. |
Uwagi
QueryServiceZwraca pośredni wskaźnik do żądanego interfejsu w określonej usługi.Obiekt wywołujący jest odpowiedzialna za wydanie tego wskaźnika, gdy nie jest już wymagane.
Po wywołaniu QueryService, przekazać zarówno identyfikator usługi (guidService) i identyfikator interfejsu (riid).guidService Określa usługę, do którego ma dostęp, oraz riid identyfikuje interfejs, który jest częścią usługi.W zamian otrzymać pośredni wskaźnik do interfejsu.
Obiekt, który implementuje interfejs może także implementować interfejsów, które są częścią innych usług.Należy rozważyć następujące kwestie:
Niektóre z tych interfejsów mogą być opcjonalne.Nie wszystkie interfejsy zdefiniowany w opisie usługi są niekoniecznie występuje co wdrożenie usługi lub każdy obiekt zwrócony.
W przeciwieństwie do wywołania QueryInterface, przekazując identyfikator różnych usług niekoniecznie oznacza że zwracany jest inny obiekt modelu COM (Component Object).
Zwracany obiekt może mieć dodatkowe interfejsy, które nie są częścią definicji usługi.
Dwóch różnych usług, takich jak SID_SMyService i SID_SYourService, zarówno określić użycie tego samego interfejsu, mimo, że implementacja interfejsu może mieć nic wspólnego między dwiema usługami.To działa, ponieważ wywołanie QueryService (SID_SMyService, IID_IDispatch) może zwracać obiekt inny niż QueryService (SID_SYourService, IID_IDispatch).Tożsamość obiektu nie przyjęto, że podczas określania identyfikatora różne usługi.
Wymagania
Nagłówek: atlcom.h