IServiceProviderImpl::QueryService
更新 : 2007 年 11 月
指定されたサービスを作成するか、そのサービスにアクセスして、サービス用に指定したインターフェイスへのインターフェイス ポインタを返します。
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject
);
パラメータ
[入力] guidService
サービス識別子 (SID) へのポインタ。[入力] riid
呼び出し元がアクセス権を取得するインターフェイスの識別子。[出力] ppvObj
要求されたインターフェイスの間接ポインタ。
戻り値
返される HRESULT 値は次のいずれかになります。
戻り値 |
説明 |
---|---|
S_OK |
サービスは正常に作成または取得されました。 |
E_INVALIDARG |
1 つ以上の引数が無効です。 |
E_OUTOFMEMORY |
メモリが不足しているため、サービスを作成できません。 |
E_UNEXPECTED |
不明なエラーが発生しました。 |
E_NOINTERFACE |
要求されたインターフェイスがこのサービスの一部ではないか、サービスが不明です。 |
解説
QueryService は、指定されたサービスで要求されたインターフェイスへの間接ポインタを返します。呼び出し元は、不要になった時点で、このポインタの参照を解放する必要があります。
QueryService を呼び出すときに、サービス識別子 (guidService) とインターフェイス識別子 (riid) の両方を渡します。guidService はアクセスするサービスを指定し、riid はサービスの一部であるインターフェイスを識別します。この応答として、インターフェイスの間接ポインタを受信します。
インターフェイスを実装するオブジェクトは、他のサービスの一部であるインターフェイスも実装する場合があります。次に例を示します。
これらのインターフェイスの一部は、必須ではない場合があります。サービスの説明で定義されているすべてのインターフェイスが、サービスのすべての実装または返されるすべてのオブジェクトに存在する必要があるとは限りません。
QueryInterface の呼び出しとは異なり、異なるサービス識別子を渡すことは、必ずしも異なるコンポーネント オブジェクト モデル (COM: Component Object Model) オブジェクトが返されることを意味しません。
返されるオブジェクトは、サービスの定義の一部ではない追加インターフェイスを持つことがあります。
SID_SMyService と SID_SYourService など、2 つの異なるサービスでは、インターフェイスの実装が 2 つのサービス間で共通でない場合でも、どちらも同じインターフェイスの使用を指定できます。QueryService (SID_SMyService, IID_IDispatch) の呼び出しでは QueryService (SID_SYourService, IID_IDispatch) とは異なるオブジェクトを返すことができるため、これが機能します。オブジェクト ID は、異なるサービス識別子を指定する場合には想定されません。
必要条件
ヘッダー : atlcom.h