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

Zobacz też

Informacje

Klasa IServiceProviderImpl

BEGIN_SERVICE_MAP