IServiceProviderImpl::QueryService
Veröffentlicht: Juli 2016
Erstellt oder greift auf den angegebenen Dienst zu und gibt einen Schnittstellenzeiger auf die angegebene Schnittstelle für den Dienst zurück.
Syntax
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
Parameter
[IN] guidService
Zeiger auf einen Dienstbezeichner (SID).[IN] riid
Bezeichner der Schnittstelle, mit der der Aufrufer erlangt soll.[OUT] ppvObj
Indirekter Zeiger auf die angeforderte Schnittstelle.
Rückgabewert
Der zurückgegebene Wert HRESULT ist einer der folgenden:
Rückgabewert |
Bedeutung |
---|---|
S_OK |
Der Dienst wurde erfolgreich erstellt oder abgerufen. |
E_INVALIDARG |
Mindestens eines der Argumente ist ungültig. |
E_OUTOFMEMORY |
Arbeitsspeicher ist nicht ausreichend, den Dienst zu erstellen. |
E_UNEXPECTED |
Unbekannter Fehler. |
E_NOINTERFACE |
Die angeforderte Schnittstelle ist nicht Bestandteil dieses Diensts, oder der Dienst ist unbekannt. |
Hinweise
QueryService gibt einen indirekten Zeiger auf die angeforderte Schnittstelle im angegebenen Dienst zurück. Der Aufrufer ist für die Freigabe dieses Zeigers zuständig, wenn es nicht mehr benötigt wird.
Wenn Sie QueryService aufrufen, führen Sie einen Dienstbezeichner (guidService) und einen Schnittstellenbezeichner (riid). guidService gibt den Dienst an, auf den Sie zugreifen möchten, und riid identifiziert eine Schnittstelle, die Teil des Diensts ist. Im Gegenzug erhalten Sie einen indirekten Zeiger auf die Schnittstelle.
Das Objekt, das die Schnittstelle implementiert, implementiert möglicherweise auch Schnittstellen, die Teil anderer Dienste sind. Berücksichtigen Sie die folgenden Punkte:
Einige dieser Schnittstellen sind möglicherweise optional. Nicht alle Schnittstellen, die in der Dienstbeschreibung definiert werden, sind unbedingt auf jeder Implementierung eines Diensts oder auf jedem zurückgegebenen Objekt vorhanden.
Anders als Aufrufe QueryInterface, einen anderen zu übergeben Dienstbezeichner bedeutet nicht unbedingt, dass ein anderes Objekt (Component Object Model) zurückgegeben wird.
Das zurückgegebene Objekt kann weitere Schnittstellen, die nicht Teil der Definition des Diensts sind.
Zwei verschiedene Dienste, wie SID_SMyService und SID_SYourService, können die Verwendung von derselben Schnittstelle angeben, obwohl die Implementierung möglicherweise der Schnittstelle nichts in Common zwischen den beiden Dienste kann. Dies funktioniert, da ein Aufruf QueryService (SID_SMyService, IID_IDispatch) ein anderes Objekt als QueryService (SID_SYourService, IID_IDispatch) zurückgeben kann. Objektidentität wird nicht angenommen, wenn Sie einen anderen Dienstbezeichner angeben.
Anforderungen
Header: möchten