Sdílet prostřednictvím


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

Jméno 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.

IServiceProviderImplpouží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í.

Vrácená 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í QueryServicepř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. Vezměte v úvahu následující skutečnosti:

  • 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í QueryInterfacenemusí 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.

Viz také

Přehled třídy