IServiceProviderImpl::QueryService
建立或存取所指定的服務及傳回介面指標指定介面的服務。
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
參數
[in] guidService
對服務 Identifier (SID) 的指標。[in] riid
呼叫端要存取介面的識別項。[in] ppvObj
受要求介面的間接取值指標。
傳回值
傳回的 HRESULT 值為下列其中一項:
傳回值 |
意義 |
---|---|
S_OK |
服務已成功建立或擷取。 |
E_INVALIDARG |
一個或多個引數無效。 |
E_OUTOFMEMORY |
記憶體不足以建立服務。 |
E_UNEXPECTED |
發生未知的錯誤。 |
E_NOINTERFACE |
需要的介面不是這個服務的一部分,或服務是未知的。 |
備註
QueryService 傳回間接指向儲存在指定的服務的要求的介面。 在不需要時,呼叫端會負責釋放這個指標。
當您呼叫 QueryService時,只要將服務識別項 (guidService) 和介面識別項 (riid)。 guidService 指定您要存取的服務,然後, riid 識別為服務的一部分的介面。 傳回時,您會收到一個間接取值指標為介面。
實作介面的物件也會實作與其他服務的介面。 請考量下列情況:
這些介面可能是選擇性的。 不是在服務描述中定義的所有必要介面存在於每個服務的實作或在每個傳回的物件。
不同於 QueryInterface呼叫,將不同的服務識別項並不一定表示不同的元件物件模型 (COM) (COM) 物件傳回。
傳回的物件具有不是做為服務之定義的區段中的其他介面。
兩個不同的服務,例如 SID_SMyService 和 SID_SYourService,可以指定使用相同的介面,,即使介面的實作則不可能有共同在兩個服務之間。 這個方式,影響,因為 QueryService (SID_SMyService, IID_IDispatch) 的呼叫會 QueryService (SID_SYourService, IID_IDispatch) 可能會傳回不同的物件。 當您指定不同的服務識別項時,物件識別假設沒有。
需求
Header: atlcom.h