データ通知なし

外部ソースのデータを使用するオブジェクトは、そのソース内のデータが変更されたときに通知を受け取る必要がある場合があります。 たとえば、一部のスプレッドシート内のデータに依存するストック ティッカー テープ ビューアーは、そのデータが変更されたときに通知を受け取り、表示を更新できるようにする必要があります。 同様に、複合ドキュメントでは、データ キャッシュを更新できるように、埋め込みオブジェクトのデータ変更に関する情報が必要です。 このような場合、データの動的な更新が望ましい場合、データソースでは、データを更新するためにコンシューマーにすべてを削除する義務を負うことなく、データコンシューマーに変更を通知するメカニズムが必要です。 データ ソースで変更が発生したことが通知された場合、使用するオブジェクトは、必要に応じて更新されたコピーを要求できるのが理想的です。

この型の非同期通知を処理するための COM のメカニズムは、アドバイズ シンクと呼ばれるオブジェクトです。これは、IAdviseSink というインターフェイスを実装する単なる COM オブジェクトです。 データのコンシューマーは、IAdviseSink実装します。 関心のあるデータ オブジェクトへのポインターを渡すことによって、通知を受け取るために登録します。

IAdviseSink インターフェイスは、非同期通知を受信するための次のメソッドを公開します。

Method をアドバイズ シンクに通知します。
onDataChanged
呼び出し元オブジェクトのデータが変更されました。
OnViewChanged
呼び出し元オブジェクトを描画する手順が変更されました。
OnRename
呼び出し元オブジェクトのモニカーが変更されました。
OnSave
呼び出し元のオブジェクトは永続ストレージに保存されています。
onClose
オブジェクトは閉じられています。

表に示すように、IAdviseSink インターフェイスは、呼び出し元オブジェクトのデータの変更以外のイベントのアドバイズ シンクに通知するためのメソッドを公開します。 呼び出し元のオブジェクトは、シンク自体の描画方法が変更されたとき、または名前の変更、保存、または閉じられたときにシンクに通知することもできます。 これらの他の通知は、メインまたは完全に複合ドキュメントのコンテキストで使用されますが、通知メカニズムは同じです。 複合ドキュメント通知の詳細については、「複合ドキュメント」を参照してください。

アドバイズ シンクを利用するには、データ ソースで IDataObject::D AdviseIDataObject::D Unadvise、および IDataObject::EnumDAdvise を実装する必要があります。 データ コンシューマーは、DAdvise mothod を呼び出して、オブジェクトのデータが変更されたときに通知されることをデータ オブジェクトに通知します。 使用しているオブジェクトは、DUnadvise メソッドを呼び出して、この接続を破棄します。 関心のあるユーザーは、EnumDAdvise メソッドを呼び出して、データ オブジェクトとのアドバイザリ接続を持つオブジェクトの数を学習できます。

ソースでデータが変更されると、データ オブジェクトは、通知を受信するために登録されているすべてのデータ コンシューマーに対して IAdviseSink::OnDataChange を呼び出します。 アドバイザリ接続を追跡し、通知のディスパッチを管理するために、データ ソースはデータ アドバイズ ホルダーと呼ばれるオブジェクトに依存します。 IDataAdviseHolder インターフェイスを実装することで、独自の データ アドバイズ ホルダー を作成できます。 または、ヘルパー関数 CreateDataAdviseHolder を呼び出すことによって、COM にこれを任せることもできます。

データ転送