IServiceProviderImpl – třída
Tato třída poskytuje výchozí implementaci IServiceProvider
rozhraní.
Syntaxe
template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider
Parametry
T
Vaše třída odvozená z IServiceProviderImpl
.
Členové
Veřejné metody
Název | Popis |
---|---|
IServiceProviderImpl::QueryService | Vytvoří zadanou službu nebo k této službě přistupuje a vrátí ukazatel rozhraní na zadané rozhraní pro službu. |
Poznámky
Rozhraní IServiceProvider
vyhledá službu určenou jeho identifikátorem GUID a vrátí ukazatel rozhraní požadovaného rozhraní ve službě. Třída IServiceProviderImpl
poskytuje výchozí implementaci tohoto rozhraní.
IServiceProviderImpl
určuje jednu metodu: QueryService, která vytvoří nebo přistupuje k zadané službě a vrátí ukazatel rozhraní na zadané rozhraní pro službu.
IServiceProviderImpl
používá mapu služby, počínaje BEGIN_SERVICE_MAP a končí END_SERVICE_MAP.
Mapa služby obsahuje dvě položky: SERVICE_ENTRY, která označuje zadané ID služby (SID) podporované objektem, a SERVICE_ENTRY_CHAIN, která volá QueryService
řetězení k jinému objektu.
Hierarchie dědičnosti
IServiceProvider
IServiceProviderImpl
Požadavky
Hlavička: atlcom.h
IServiceProviderImpl::QueryService
Vytvoří zadanou službu nebo k této službě přistupuje a vrátí ukazatel rozhraní na zadané rozhraní pro službu.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject);
Parametry
GuidService
[v] Ukazatel na identifikátor služby (SID).
riid
[v] Identifikátor rozhraní, ke kterému má volající získat přístup.
ppvObj
[ven] Nepřímý ukazatel na požadované rozhraní.
Návratová hodnota
Vrácená hodnota HRESULT je jedna z následujících hodnot:
Vrácená hodnota | Význam |
---|---|
S_OK | Služba byla úspěšně vytvořena nebo načtena. |
E_INVALIDARG | Jeden nebo více argumentů je neplatné. |
E_OUTOFMEMORY | Paměť není dostatečná k vytvoření služby. |
E_UNEXPECTED | Došlo k neznámé chybě. |
E_NOINTERFACE | Požadované rozhraní není součástí této služby nebo je služba neznámá. |
Poznámky
QueryService
vrátí nepřímý ukazatel na požadované rozhraní v zadané službě. Volající zodpovídá za uvolnění tohoto ukazatele, pokud už není potřeba.
Při volání QueryService
předáte identifikátor služby (guidService) i identifikátor rozhraní (riid). GuidService určuje službu, ke které chcete získat přístup, a riid identifikuje rozhraní, které je součástí služby. Ve vráceném případě obdržíte nepřímý ukazatel na rozhraní.
Objekt, který implementuje rozhraní, může také implementovat rozhraní, která jsou součástí jiných služeb. Zvažte použití těchto zdrojů:
Některá z těchto rozhraní můžou být volitelná. Ne všechna rozhraní definovaná v popisu služby se nutně nacházejí při každé implementaci služby nebo u každého vráceného objektu.
Na rozdíl od volání
QueryInterface
nemusí předání jiného identifikátoru služby nutně znamenat, že je vrácen jiný objekt modelu COM (Component Object Model).Vrácený objekt může mít další rozhraní, která nejsou součástí definice služby.
Dvě různé služby, jako jsou SID_SMyService a SID_SYourService, mohou určit použití stejného rozhraní, i když implementace rozhraní nemusí mít nic společného mezi těmito dvěma službami. To funguje, protože volání QueryService
(SID_SMyService, IID_IDispatch) může vrátit jiný objekt než QueryService
(SID_SYourService, IID_IDispatch). Identita objektu se nepředpokládá při zadání jiného identifikátoru služby.