IServiceProviderImpl-Klasse
Diese Klasse stellt eine Standardimplementierung der IServiceProvider
Schnittstelle bereit.
Syntax
template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider
Parameter
T
Ihre Klasse, abgeleitet von IServiceProviderImpl
.
Member
Öffentliche Methoden
Name | Beschreibung |
---|---|
IServiceProviderImpl::QueryService | Erstellt oder greift auf den angegebenen Dienst zu und gibt einen Schnittstellenzeiger auf die angegebene Schnittstelle für den Dienst zurück. |
Hinweise
Die IServiceProvider
Schnittstelle sucht einen durch seine GUID angegebenen Dienst und gibt den Schnittstellenzeiger für die angeforderte Schnittstelle für den Dienst zurück. Klasse IServiceProviderImpl
stellt eine Standardimplementierung dieser Schnittstelle bereit.
IServiceProviderImpl
Gibt eine Methode an: QueryService, die den angegebenen Dienst erstellt oder darauf zugreift und einen Schnittstellenzeiger auf die angegebene Schnittstelle für den Dienst zurückgibt.
IServiceProviderImpl
verwendet eine Dienstkarte, beginnend mit BEGIN_SERVICE_MAP und endet mit END_SERVICE_MAP.
Die Dienstzuordnung enthält zwei Einträge: SERVICE_ENTRY, die eine angegebene Dienst-ID (SID) angibt, die vom Objekt unterstützt wird, und SERVICE_ENTRY_CHAIN, die aufruft QueryService
, an ein anderes Objekt zu verketten.
Vererbungshierarchie
IServiceProvider
IServiceProviderImpl
Anforderungen
Kopfzeile: atlcom.h
IServiceProviderImpl::QueryService
Erstellt oder greift auf den angegebenen Dienst zu und gibt einen Schnittstellenzeiger auf die angegebene Schnittstelle für den Dienst zurück.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject);
Parameter
guidService
[in] Zeiger auf einen Dienstbezeichner (SID).
riid
[in] Bezeichner der Schnittstelle, auf die der Aufrufer Zugriff erhält.
ppvObj
[out] Indirekter Zeiger auf die angeforderte Schnittstelle.
Rückgabewert
Der zurückgegebene HRESULT-Wert 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 | Der Arbeitsspeicher reicht nicht aus, um den Dienst zu erstellen. |
E_UNEXPECTED | Unbekannter Fehler aufgetreten. |
E_NOINTERFACE | Die angeforderte Schnittstelle ist nicht Teil 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 dafür verantwortlich, diesen Zeiger freizugeben, wenn er nicht mehr benötigt wird.
Beim Aufrufen QueryService
übergeben Sie sowohl einen Dienstbezeichner (guidService) als auch einen Schnittstellenbezeichner (riid). Der guidService gibt den Dienst an, auf den Sie zugreifen möchten, und die 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, kann auch Schnittstellen implementieren, die Teil anderer Dienste sind. Beachten Sie Folgendes:
Einige dieser Schnittstellen können optional sein. Nicht alle in der Dienstbeschreibung definierten Schnittstellen sind unbedingt für jede Implementierung des Diensts oder für jedes zurückgegebene Objekt vorhanden.
Im Gegensatz zu
QueryInterface
Aufrufen bedeutet das Übergeben eines anderen Dienstbezeichners nicht unbedingt, dass ein anderes COM-Objekt (Component Object Model) zurückgegeben wird.Das zurückgegebene Objekt verfügt möglicherweise über zusätzliche Schnittstellen, die nicht Teil der Definition des Diensts sind.
Zwei unterschiedliche Dienste, z. B. SID_SMyService und SID_SYourService, können beide die Verwendung derselben Schnittstelle angeben, obwohl die Implementierung der Schnittstelle zwischen den beiden Diensten möglicherweise nichts gemeinsam hat. Dies funktioniert, da ein Aufruf QueryService
von (SID_SMyService, IID_IDispatch) ein anderes Objekt QueryService
als (SID_SYourService, IID_IDispatch) zurückgeben kann. Die Objektidentität wird nicht angenommen, wenn Sie einen anderen Dienstbezeichner angeben.