IServiceProviderImpl::QueryService
创建或访问指定的服务并返回接口指针。服务的指定接口。
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
参数
[IN] guidService
为服务标识符(SID)的指针。[IN] riid
调用方将能够访问接口的标识符。[OUT] ppvObj
所请求的接口间接指针。
返回值
返回的 HRESULT 值为下列之一:
返回值 |
含义 |
---|---|
S_OK |
服务成功创建或检索到的。 |
E_INVALIDARG |
一个或多个参数无效。 |
E_OUTOFMEMORY |
内存不足以创建服务。 |
E_UNEXPECTED |
发生未知错误。 |
E_NOINTERFACE |
请求的接口不是此服务的部分,或服务是未知的。 |
备注
QueryService 中的项时指定的服务中返回一个间接指针所请求的接口。 在不再需要时,调用方负责释放此指针。
当您调用 QueryService时,可以通过服务标识符(guidService)和接口标识符(riid)。 guidService 指定希望访问的服务,因此,riid 确定服务的一部分的接口。 反过来,您会收到一个间接指针接口。
实现接口的对象可能还实现了其他服务的接口。 请考虑下列事项:
其中一些接口可能是可选的。 不在服务说明定义的所有接口必须是存在于服务的每个实现或在每个返回的对象。
不同于调用 QueryInterface,通过标识符不一定意味着不同的服务不同的组件对象模型(COM)返回对象。
返回的对象可能包含不属于服务定义的部分的其他接口。
两个不同服务,例如SID_SMyService和SID_SYourService,可以指定使用同一接口,因此,即使接口的实现没有可能具有很多共同之处在两个服务之间的。 可以这样做,因为对 QueryService (SID_SMyService,IID_IDispatch)的调用比 QueryService (SID_SYourService,IID_IDispatch)可能返回不同的对象。 当指定不同的服务标识符时,对象标识假定无。
要求
Header: atlcom.h