次の方法で共有


IServiceProviderImpl::QueryService

作成するか、指定したサービスにアクセス、およびサービスの特定のインターフェイスへのインターフェイス ポインターを返します。

STDMETHOD(QueryService)(
   REFGUID guidService,
   REFIID riid,
   void** ppvObject 
);

パラメーター

  • [入力] guidService
    (SID) サービス識別子へのポインター。

  • [入力] riid
    呼び出し元がアクセスするためのインターフェイス ID。

  • [入力] ppvObj
    要求されたインターフェイスへの間接ポインター。

戻り値

HRESULT の返された値は次のいずれかです:

戻り値

説明

S_OK

サービスが正常に作成または取得されました。

E_INVALIDARG

1 つ以上の引数が無効です。

E_OUTOFMEMORY

メモリは、サービスを作成できないです。

E_UNEXPECTED

不明なエラーが発生しました。

E_NOINTERFACE

要求されたインターフェイスは、このサービスの一部ではない場合、またはサービスは不明です。

解説

QueryService は、指定したサービス要求されたインターフェイスには、間接ポインターを返します。呼び出し元がなくなったら、このポインターの解放を管理します。

QueryServiceを呼び出すと、サービス識別子 (guidService) とインターフェイス ID (riid両方) を渡します。guidService には、アクセスすると、riid は、サービスの一部であるインターフェイスを識別しますサービスを指定します。代わりに、インターフェイスには、間接ポインターを受け取ります。

インターフェイスを実装する場合、他のサービスの一部であるインターフェイスを実装する可能性があるオブジェクト。次の点を考慮する:

  • これらのインターフェイスの一部は省略可能である場合があります。サービスの記述で定義されたすべてのインターフェイスは必ずしもサービスの実装または、返されたオブジェクトにありません。

  • QueryInterfaceの呼び出しとは異なり、別のサービス識別子を渡すことは、コンポーネント オブジェクト モデルの (COM) の別のオブジェクトが返されることを意味しません。

  • 返されたオブジェクトは、サービスの定義の一部ではない追加のインターフェイスがある場合があります。

COM+ 2 サービスは、SID_SMyService と SID_SYourService など、インターフェイスの実装は、COM+ 2 サービス間の一般的な何もない場合でも、同じインターフェイスの使用を指定できます。これは QueryService (SID_SMyService、IID_IDispatch) の呼び出しが QueryService (SID_SYourService、IID_IDispatch) とは異なるオブジェクトを返すことができるため、動作します。オブジェクト ID は別のサービス識別子を指定すると想定していません。

必要条件

ヘッダー: atlcom.h

参照

関連項目

IServiceProviderImpl クラス

BEGIN_SERVICE_MAP