登録

ユーザーが OLE 項目をアプリケーションに挿入する場合、OLE は選択できるオブジェクトの種類の一覧を提示します。 OLE はシステム登録データベースからこの一覧を取得します。このデータベースには、すべてのサーバー アプリケーションによって提供された情報が含まれています。 サーバー自体が登録される場合、システム登録データベース (レジストリ) に格納されるエントリによって、提供される各オブジェクトの種類、ファイル拡張子、サーバー自体へのパスなどの情報が記述されます。

フレームワークと OLE システムのダイナミック リンク ライブラリ (DLL) は、このレジストリを使用して、どの OLE 項目の種類をシステムで使用できるかを判別します。 また、OLE システム DLL はこのレジストリを使用して、リンクされるか埋め込まれたオブジェクトがアクティブ化されたときにサーバー アプリケーションを起動する方法も決定します。

この記事では、各サーバー アプリケーションが、インストール時と各実行時に何をする必要があるかについて説明します。

システム登録データベースの詳細と、それを更新するために使用する .reg ファイルの形式については、「OLE プログラマ リファレンス」を参照してください。

サーバーのインストール

初めてサーバー アプリケーションをインストールする場合は、サポートするすべての種類の OLE 項目を登録する必要があります。 また、サーバーがスタンドアロン アプリケーションとして実行されるたびに、サーバーによってシステム登録データベースが更新されるようにすることもできます。 そうすることで、サーバーの実行可能ファイルが移動された場合にも、登録データベースが最新の状態に保たれます。

Note

アプリケーション ウィザードによって生成された MFC アプリケーションは、スタンドアロン アプリケーションとして実行されるときに、自動的にアプリケーション自体を登録します。

インストール中にアプリケーションを登録する場合は、RegEdit.exe プログラムを使用します。 アプリケーションにセットアップ プログラムを含める場合は、セットアップ プログラムで "RegEdit /S appname.reg" を実行してください。 (/S フラグはサイレント操作を示します。つまり、コマンドが正常に完了したことを示すダイアログ ボックスは表示されません)。それ以外の場合は、RegEdit を手動で実行するようにユーザーに指示します。

Note

アプリケーション ウィザードによって作成された .reg ファイルには、実行可能ファイルの完全なパスが含まれていません。 インストール プログラムでは、実行可能ファイルへの完全なパスを含むように .reg ファイルを変更するか、インストール ディレクトリを含めるように PATH 環境変数を変更する必要があります。

RegEdit によって、.reg テキスト ファイルの内容が登録データベースにマージされます。 データベースを確認または修復するには、レジストリ エディターを使用します。 必須の OLE エントリを削除しないように注意してください。

サーバーの初期化

アプリケーション ウィザードを使用してサーバー アプリケーションを作成すると、ウィザードによってすべての初期化タスクが自動的に完了されます。 このセクションでは、サーバー アプリケーションを手動で記述する場合に必要な操作について説明します。

サーバー アプリケーションがコンテナー アプリケーションによって起動されると、OLE システム DLL によって、サーバーのコマンド ラインに "/Embedding" オプションが追加されます。 サーバー アプリケーションの動作は、コンテナーによって起動されたかどうかによって異なります。そのため、アプリケーションが実行の開始時に最初に行う必要があるのは、コマンド ラインの "/Embedding" または "-Embedding" オプションを確認することです。 このスイッチが存在する場合は、サーバーをインプレース アクティブまたは完全なオープンの状態で表示する、別のリソースのセットを読み込みます。 詳細については、「メニューとリソース: サーバーの変更点」を参照してください。

また、サーバー アプリケーションは、コマンド ラインを解析するために、その CWinApp::RunEmbedded 関数を呼び出す必要もあります。 0 以外の値が返される場合、アプリケーションはウィンドウを表示してはいけません。スタンドアロン アプリケーションとしてではなく、コンテナー アプリケーションから実行されているためです。 この関数は、システム登録データベース内のサーバーのエントリを更新し、RegisterAll メンバー関数を呼び出してインスタンスの登録を行います。

サーバー アプリケーションを起動するときに、アプリケーションがインスタンスの登録を実行できることを確認する必要があります。 インスタンス登録によって、サーバーがアクティブであることと、コンテナーから要求を受信する準備ができていることが、OLE システム DLL に通知されます。 これによって、登録データベースにエントリが追加されることはありません。 COleTemplateServer によって定義された ConnectTemplate メンバー関数を呼び出すことによって、サーバーのインスタンス登録を実行します。 これにより、CDocTemplate オブジェクトが COleTemplateServer オブジェクトに接続されます。

ConnectTemplate 関数は、3 つのパラメーター (サーバーの CLSIDCDocTemplate オブジェクトへのポインター、およびサーバーで複数のインスタンスがサポートされているかどうかを示すフラグ) を受け取ります。 ミニサーバーは、複数のインスタンスをサポートできる必要があります。つまり、サーバーの複数のインスタンス (コンテナーごとに 1 つ) を同時に実行できる必要があります。 そのため、ミニサーバーを起動するとき、このフラグに TRUE を渡します。

ミニサーバーを記述している場合は、定義上、ミニサーバーは常にコンテナーによって起動されます。 この場合もコマンド ラインを解析して、"/Embedding" オプションを確認する必要があります。 コマンド ラインにこのオプションがない場合は、ユーザーがスタンドアロン アプリケーションとしてミニサーバーを起動しようとしたことになります。 そうなった場合は、システム登録データベースにサーバーを登録し、コンテナー アプリケーションからミニサーバーを起動するようにユーザーに指示するメッセージ ボックスを表示します。

関連項目

OLE
サーバー
CWinApp::RunAutomated
CWinApp::RunEmbedded
COleTemplateServer クラス