IServiceProviderImpl::QueryService
Vytvoří nebo přistupuje k dané službě a vrátí ukazatele rozhraní zadané rozhraní služby.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
Parametry
[V]guidService
Ukazatel na identifikátoru služby (SID).[V]riid
Identifikátor rozhraní, které volající získat přístup.[VÝSTUP]ppvObj
Nepřímé ukazatele požadované rozhraní.
Vrácená hodnota
Vrácené HRESULT hodnota je jeden z následujících:
Vrácená hodnota |
Význam |
---|---|
S_OK |
Služba byla úspěšně vytvořena nebo načíst. |
E_INVALIDARG |
Jeden nebo více parametrů je neplatný. |
CHYBA E_OUTOFMEMORY |
Paměť je nedostatečná vytvořit službu. |
E_UNEXPECTED |
Došlo k neznámé chybě. |
E_NOINTERFACE |
Požadované rozhraní není součástí této služby nebo služby neznámý. |
Poznámky
QueryServicenepřímý ukazatel vrátí požadované rozhraní zadané služby.Volající je odpovědná za uvolňování tento ukazatel, pokud již není vyžadováno.
Při volání QueryService , předat i identifikátor služby (guidService) a identifikátor rozhraní (riid). guidService Určuje službu, na kterou chcete přístup, a riid označuje rozhraní, který je součástí služby.Na oplátku obdržíte nepřímý ukazatel rozhraní.
Objekt, který implementuje rozhraní může být také implementovat rozhraní, které jsou součástí jiné služby.Zvažte následující:
Některé z těchto rozhraní mohou být nepovinné.Všechna rozhraní definované v popisu služby jsou nutně přítomna v každém zavádění služby nebo na každý vrácený objekt.
Na rozdíl od volání QueryInterface , předávání identifikátor jinou službu nemusí nutně znamenat, že jiný objekt modelu COM (Component Object), je vrácena.
Vrácený objekt může mít další rozhraní, které nejsou součástí definice služby.
Dvě různé služby, například SID_SMyService a SID_SYourService, oba určit použití stejné rozhraní, přestože implementaci rozhraní pravděpodobně nemají nic společného mezi dvě služby.Toto funguje, protože volání QueryService (SID_SMyService, IID_IDispatch) se můžete vrátit jiný objekt než QueryService (SID_SYourService, IID_IDispatch).Identita objektu není předpokládá, že zadáte identifikátor jinou službu.
Požadavky
Záhlaví: atlcom.h