OLE ハンドラ
OLE ハンドラー は、リンクと埋め込みのために使用される複数の対話コンポーネントを含む DLL です。 コンテナーとそのサーバー間の一定のプロセス間通信のコストを回避するために、ハンドラーはコンテナーのプロセス空間に読み込まれ、一種の代理プロセスとしてサーバーの代わりに動作します。 OLE ハンドラーは、描画要求など、サーバー アプリケーションの注意を必要としないコンテナー要求を管理します。 オブジェクト ハンドラーが提供できないものをコンテナーが要求すると、ハンドラーは COM のアウトプロセス通信メカニズムを使用してサーバー アプリケーションと通信します。
OLE ハンドラーのコンポーネントには、ハンドラーとサーバー間の通信を管理するリモーティング部分、オブジェクトのデータ(そのデータがどのようにフォーマットされ表示されるべきかという情報とともに)を格納するキャッシュ、DLL の他のコンポーネントの活動を調整する制御オブジェクトが含まれます。 さらに、オブジェクトがリンクの場合、DLL にはリンク コンポーネントまたは リンク オブジェクト も含まれ、リンク ソースの名前と場所を追跡します。
OLE には、ほとんどのアプリケーションがリンクと埋め込みに使用する既定のハンドラーが用意されています。 既定値がサーバーの要件と一致しない場合は、既定のハンドラーを完全に置き換えるか、必要に応じて提供される機能の一部を使用できます。 後者の場合、アプリケーション ハンドラーは、新しいコントロール オブジェクトと既定のハンドラーで構成される集計オブジェクトとして実装されます。 アプリケーションと既定のハンドラーの組み合わせは、 インプロセス ハンドラーとも呼ばれます。 リモート処理ハンドラー は、システム レジストリに CLSID が割り当てられていないオブジェクト、またはハンドラーが指定されていないオブジェクトに使用されます。 これらの種類のオブジェクトのハンドラーから必要なのは、プロセス境界を越えて情報を渡すことです。 既定のハンドラーの新しいインスタンスを作成するには、 OleCreateDefaultHandler を呼び出します。 特殊な状況では、 OleCreateEmbeddingHelper を呼び出 します。
あるクラスのハンドラーのインスタンスを作成する場合、別のクラスに使用することはできません。 複合ドキュメントに使用される場合、OLE ハンドラーは、特定のクラスのオブジェクトがリモートでアクセスされるときにコンテナー側のデータ構造を実装します。
OLE は、複合ドキュメント ローカル サーバーのクライアントの既定のハンドラーを定義しました。 既定のハンドラーでは、一般的なサーバーでは実装されなかったインターフェイスが多数実装されました。 その後、OLE が複合ドキュメントのインプロセス サーバーを許可した場合、クライアントがシームレスに操作できるように、これらの追加のインターフェイスを実装する埋め込みヘルパーを作成する必要がありました。
クライアント側ハンドラーを定義して実装するフレームワーク デザイナーは、設計でこの問題を考慮し、同じ理由で同等のインプロセス ヘルパーを提供する必要があります。 デザイナーが現在、サーバーが公開していないハンドラーにインターフェイスを実装していない場合でも、今後追加できるようにヘルパーを定義する必要がある場合があります。 または、サーバー オブジェクト自体に追加のインターフェイスを実装することもできます。
関連トピック