複合ドキュメント

OLE複合ドキュメントを使用すると、1つのアプリケーション内で作業しているユーザーが、さまざまな形式で記述され、複数のソースから派生したデータを操作できます。 たとえば、ユーザーは、2番目のアプリケーションで作成されたグラフと、3番目のアプリケーションで作成されたサウンドオブジェクトをワープロドキュメントに挿入する場合があります。 グラフをアクティブにすると、2番目のアプリケーションがそのユーザーインターフェイス、または少なくともオブジェクトの編集に必要なツールを含む部分をロードします。 サウンドオブジェクトをアクティブにすると、3番目のアプリケーションがそのサウンドオブジェクトを再生します。 どちらの場合も、ユーザーは1つのドキュメントのコンテキスト内から外部ソースのデータを操作できます。

OLE複合ドキュメントテクノロジは、COM、構造化ストレージ、および均一なデータ転送で構成される基盤に基づいています。 次に示すように、これらのコアテクノロジは、OLE複合ドキュメントで重要な役割を果たします。

COM

複合ドキュメントオブジェクトは、基本的には、既存のドキュメントに埋め込むことも、既存のドキュメントにリンクすることもできるCOMオブジェクトです。 COMオブジェクトとして、複合ドキュメントオブジェクトはIUnknownインターフェースを公開し、クライアントはこのインターフェースを通じて、IOleObjectIOleLinkIViewObject2など、複合ドキュメントオブジェクトに特有の特別な機能を提供する他のインターフェースへのポインタを取得できます。

構造化ストレージ

複合ドキュメントオブジェクトは、自身のストレージを管理するために、IPersistStorageまたはオプションでIPersistStreamインターフェースを実装する必要があります。 複合ドキュメントを作成するためのコンテナは、オブジェクトがデータを保存および取得するためのIStorageインターフェースを提供する必要があります。 コンテナはほぼ常に、OLEのCompound Files実装から取得したIStorageのインスタンスを提供します。 コンテナはまた、オブジェクトのIPersistStorageおよび/またはIPersistStreamインターフェースを使用する必要があります。

Uniform Data Transfer

複合ドキュメントをサポートするアプリケーションは、IDataObject を実装する必要があります。なぜなら、埋め込みオブジェクトやリンク オブジェクトは、標準の Microsoft Windows クリップボード形式ではなく、特別な OLE クリップボード形式を使用して転送されたデータとして始まるからです。 つまり、埋め込みオブジェクトまたはリンクオブジェクトとしてデータの書式設定は、OLEの統一されたデータ転送モデルによって提供されるオプションの1つだけです。

OLEの複合ドキュメントテクノロジは、ソフトウェア開発者とユーザーの両方にメリットがあります。 ソフトウェア開発者は、1つのアプリケーションに考えられるすべての機能を詰め込む義務を感じるのではなく、必要に応じて、追加の機能を提供するために他のアプリケーションに依存する、より小さな、より焦点を絞ったアプリケーションを開発することができます。 ソフトウェア開発者がそのコア機能を超える機能をアプリケーションに提供することを決定した場合、開発者は、これらの追加サービスを、サービスが必要な場合にのみメモリに読み込まれる個別のDllとして実装できます。 ユーザーは、1つのマスタードキュメント内から必要なすべてのコンポーネントを操作して、必要に応じて組み合わせることができる、より小さく、高速で、より高性能なソフトウェアの恩恵を受けます。

詳細については、次のトピックを参照してください。

データ転送

構造化ストレージ