次の方法で共有


パブリッシャー フィルターの作成

パブリッシャー フィルターを確立するには、イベント クラスの MultiPublisherFilterCLSID プロパティを使用するか、IEventControl::SetPublisherFilter を使用する方法の 2 つがあります。

  • COM+ キューに登録されたコンポーネント サービスを使用してイベント オブジェクトを作成できるため、推奨される方法は、イベント クラスで MultiPublisherFilterCLSID プロパティを使用してパブリッシャー フィルターを設定することです。 これにより、イベント オブジェクトのイベント インターフェイスのすべてのメソッドに対して 1 つのフィルター オブジェクトが確立されます。 イベント オブジェクトは、CoCreateInstance を使用してイベント クラス オブジェクトがインスタンス化されるときに、パブリッシャー フィルターをアクティブにします。
  • SetPublisherFilter を使用することもできます。 ただし、このメソッドを選択した場合、インターフェイスはキューに登録できないため、パブリッシャーとイベント クラス オブジェクトの間で COM+ キューに登録されたコンポーネント サービスでイベント オブジェクトを使用することはできません。 COM+ イベントでキューに登録されたコンポーネント サービスを使用する方法の詳細については、「COM+ キューに入ったコンポーネントでの COM+ イベントの使用」を参照してください

イベントには、1 つ以上のフィルター オブジェクトを含めたり、まったく含めなかったりする場合があります。 パブリッシャー フィルター オブジェクトは、イベント クラス オブジェクトに対して 1 つの起動インターフェイスまたは複数の起動インターフェイスがあるかどうかに応じて、IPublisherFilter または IMultiInterfacePublisherFilterサポートする必要があります。 IPublisherFilter インターフェイスと IMultiInterfacePublisherFilter インターフェイスはどちらも Initialize メソッドを指定します。 Initialize メソッドは、フィルター オブジェクトを作成した直後にイベント クラス オブジェクトによって呼び出されます。

COM+ イベントは、フィルターで 2 つのメソッドを呼び出そうとします。 最初に IPublisherFilter::P repareToFire を呼び出し、IFiringControl インターフェイス ポインターをフィルターに渡します。 次に、イベント インターフェイスのフィルター オブジェクトに対してクエリを実行します。 フィルターがイベント インターフェイスをサポートしている場合、フィルターはイベント インターフェイスに対してメソッドを呼び出します。 これにより、イベントのパブリッシャー パラメーターにアクセスできます。 フィルターでは、これらのパラメーターを使用して、起動するサブスクリプションを決定できます。

COM+ でのイベントのフィルター処理