OLE の背景知識 : MFC における実装
OLE API は、そのままではサイズが大きく複雑なので、直接呼び出して OLE アプリケーションを作成するのは、たいへん手間がかかります。 MFC (Microsoft Foundation Class) ライブラリ版の OLE を使うと、完全な OLE 対応アプリケーションを作成する作業量が減ります。
ここでは、まず MFC に実装されていない OLE API について説明します。 続いて、実装されている部分が Windows SDK の OLE の部分にどのように対応するのかを説明します。
OLE の中でクラス ライブラリで実装されていない部分
OLE のインターフェイスや機能には、MFC では直接実装されていないものもあります。 このような機能を使う場合は、OLE API を直接呼び出します。
IMoniker インターフェイス
IMoniker インターフェイスはクラス ライブラリによって実装されていますが (COleServerItem クラスなど)、以前はプログラマに対して公開されていませんでした。 このインターフェイスの詳細については、Windows SDK の「OLE Moniker Implementations」を参照してください。 CMonikerFile クラスと CAsyncMonikerFile クラスについても参照してください。IUnknown インターフェイスおよび IMarshal インターフェイス
IUnknown インターフェイスはクラス ライブラリに実装されていますが、プログラマには公開されていません。 IMarshal インターフェイスはクラス ライブラリに実装されませんが、内部的に使われています。 クラス ライブラリを使って作成したオートメーション サーバーには、既にマーシャリング機能が組み込まれています。Docfile (複合ファイル)
クラス ライブラリは、複合ファイルを部分的にサポートしています。 複合ファイルを直接操作する関数には、ファイルの作成用の関数だけが用意されています。 MFC は、COleFileStream クラスを使って標準のファイル関数によるストリームの操作をサポートします。 詳細についてを参照してください「コンテナー:複合ファイル。インプロセス サーバーとオブジェクト ハンドラー
インプロセス サーバーとオブジェクト ハンドラーを使用すると、ビジュアル編集データと完全なコンポーネント オブジェクト モデル (COM) をダイナミック リンク ライブラリ (DLL: Dynamic Link Library) に実装できます。 この場合は、DLL から OLE API を直接呼び出します。 ただし、開発するオートメーション サーバーがユーザー インターフェイスを持っていない場合は、MFC アプリケーション ウィザードを使うと、サーバーをインプロセス サーバーとして完全に DLL に内蔵できます。 これらのトピックの詳細については、「オートメーション サーバー」を参照してください。ヒント
オートメーション サーバーを実装する最も簡単な方法は、DLL に組み込む方法です。 MFC を使って組み込むことができます。
MFC の OLE 関連クラスに OLE インターフェイスを実装する方法の詳細については、「MFC テクニカル ノート」の「テクニカル ノート 38: MFC/OLE IUnknown の実装」、「テクニカル ノート 39: MFC/OLE オートメーションの実装」、および「テクニカル ノート 40: MFC/OLE 埋め込み先サイズ変更とズーム」を参照してください。