ユーザーが OLE アイテムをアプリケーションに挿入する場合、OLE は選択できるオブジェクトの種類の一覧を表示します。 OLE は、すべてのサーバー アプリケーションによって提供される情報を含むシステム登録データベースからこのリストを取得します。 サーバーが自身を登録すると、システム登録データベース (レジストリ) に格納されるエントリは、提供する各種類のオブジェクト、ファイル拡張子、およびそれ自体へのパスなどを記述します。
フレームワークと OLE システムダイナミック リンク ライブラリ (DLL) は、このレジストリを使用して、システムで使用できる OLE 項目の種類を決定します。 OLE システム DLL では、このレジストリを使用して、リンクされたオブジェクトまたは埋め込みオブジェクトがアクティブになったときにサーバー アプリケーションを起動する方法も決定します。
この記事では、各サーバー アプリケーションがインストールされたとき、および実行されるたびに実行する必要がある操作について説明します。
システム登録データベースとその更新に使用する.reg ファイルの形式の詳細については、「 OLE プログラマーリファレンス」を参照してください。
サーバーのインストール
サーバー アプリケーションを初めてインストールするときは、サポートされているすべての種類の OLE 項目を登録する必要があります。 スタンドアロン アプリケーションとして実行されるたびに、サーバーでシステム登録データベースを更新させることもできます。 これにより、サーバーの実行可能ファイルが移動された場合、登録データベースは -date up-to保持されます。
注
アプリケーション ウィザードによって生成された MFC アプリケーションは、スタンドアロン アプリケーションとして実行されるときに自動的に登録されます。
インストール中にアプリケーションを登録する場合は、RegEdit.exe プログラムを使用します。 アプリケーションにセットアップ プログラムを含める場合は、セットアップ プログラムで "RegEdit /S appname.reg" を実行します。 (/S フラグはサイレント操作を示します。つまり、コマンドが正常に完了したことを示すダイアログ ボックスは表示されません)。それ以外の場合は、RegEdit を手動で実行するようにユーザーに指示します。
注
アプリケーション ウィザードによって作成された.reg ファイルには、実行可能ファイルの完全なパスは含まれません。 インストール プログラムは、実行可能ファイルへの完全なパスを含むように.reg ファイルを変更するか、PATH 環境変数を変更してインストール ディレクトリを含める必要があります。
RegEdit は、.reg テキスト ファイルの内容を登録データベースにマージします。 データベースを確認したり修復したりするには、レジストリ エディターを使用します。 重要な OLE エントリが削除されないように注意してください。
サーバーの初期化
アプリケーション ウィザードを使用してサーバー アプリケーションを作成すると、ウィザードによってすべての初期化タスクが自動的に完了します。 このセクションでは、サーバー アプリケーションを手動で記述する場合に実行する必要がある操作について説明します。
コンテナー アプリケーションによってサーバー アプリケーションが起動されると、OLE システム DLL によってサーバーのコマンド ラインに "/Embedding" オプションが追加されます。 サーバー アプリケーションの動作は、コンテナーによって起動されたかどうかによって異なるため、アプリケーションが実行を開始するときに最初に行う必要があるのは、コマンド ラインで "/Embedding" または "-Embedding" オプションをチェックすることです。 このスイッチが存在する場合は、サーバーがその場でアクティブであるか、完全に開いていることを示す異なる種類のリソースを読み込みます。 詳細については、「 メニューとリソース: サーバーの追加」を参照してください。
サーバー アプリケーションでは、コマンド ラインを解析するために、 CWinApp::RunEmbedded
関数も呼び出す必要があります。 0 以外の値を返す場合、アプリケーションはスタンドアロン アプリケーションではなくコンテナー アプリケーションから実行されているため、ウィンドウを表示しないでください。 この関数は、システム登録データベース内のサーバーのエントリを更新し、インスタンス登録を実行して RegisterAll
メンバー関数を呼び出します。
サーバー アプリケーションの起動時に、インスタンスの登録を実行できることを確認する必要があります。 インスタンス登録は、サーバーがアクティブであり、コンテナーからの要求を受信する準備ができていることを OLE システム DLL に通知します。 登録データベースにエントリは追加されません。
ConnectTemplate
によって定義されたCOleTemplateServer
メンバー関数を呼び出して、サーバーのインスタンス登録を実行します。 これにより、 CDocTemplate
オブジェクトが COleTemplateServer
オブジェクトに接続されます。
ConnectTemplate
関数は、サーバーの CLSID、CDocTemplate
オブジェクトへのポインター、サーバーが複数のインスタンスをサポートしているかどうかを示すフラグの 3 つのパラメーターを受け取ります。 ミニサーバーは、複数のインスタンスをサポートできる必要があります。つまり、サーバーの複数のインスタンスをコンテナーごとに 1 つずつ同時に実行できる必要があります。 したがって、ミニサーバーを起動するときに、このフラグに TRUE を 渡します。
ミニサーバーを記述している場合、定義上、それは常にコンテナーによって起動されます。 コマンド ラインを解析して、"/Embedding" オプションを確認する必要があります。 コマンド ラインにこのオプションがない場合は、ユーザーがスタンドアロン アプリケーションとしてミニサーバーを起動しようとしたことを意味します。 この場合は、サーバーをシステム登録データベースに登録し、コンテナー アプリケーションからミニサーバーを起動するようにユーザーに通知するメッセージ ボックスを表示します。
こちらも参照ください
OLE
サーバー
CWinApp::RunAutomated
CWinApp::RunEmbedded
COleTemplateServer クラス