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

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.

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

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