登録

更新 : 2007 年 11 月

ユーザーが OLE オブジェクトをアプリケーションに挿入するときは、OLE によって表示されたオブジェクト タイプのリストからオブジェクト タイプを選択します。このリストは、システム登録データベースから作成されます。このデータベースには、すべてのサーバー アプリケーションから提供された情報が格納されています。サーバーが自分自身を登録すると、登録された情報はデータベース (レジストリ) にも登録されます。レジストリは、サーバー アプリケーションが提供する各オブジェクト タイプ、ファイル拡張子、およびアプリケーションのパスを表示します。

フレームワークと OLE システムのダイナミック リンク ライブラリ (DLL: Dynamic Link Library) は、この登録データベースを調べて、そのシステムで利用できる OLE オブジェクトのタイプを判定します。また、OLE システム DLL は、リンク オブジェクトまたは埋め込みオブジェクトのアクティブ時に、サーバー アプリケーションの起動方法を判定するときにも、この登録データベースを使います。

ここでは、各サーバー アプリケーションのインストール時および実行時に必要な処理について説明します。

システム登録データベースの詳細、およびデータベースの更新時に使う .reg ファイルの形式については、『OLE Programmer's Reference』を参照してください。

サーバーのインストール

サーバー アプリケーションを最初にインストールするときは、そのアプリケーションがサポートする OLE オブジェクトのタイプをすべて登録する必要があります。また、サーバーをスタンドアロン アプリケーションとして起動するたびに、システム登録データベースを更新する必要があります。この更新によって、サーバーの実行可能ファイルが移動されても、システム登録データーベースには最新の情報が保持されます。

839sc8ca.alert_note(ja-jp,VS.90).gifメモ :

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

インストール時にアプリケーションを登録するには、レジストリ エディタ (RegEdit.exe プログラム) を使います。Windows 95、Windows 98、および Windows ME では、RegEdit は Windows ディレクトリにあります。Windows NT および Windows 2000 では、RegEdit は Windows System32 ディレクトリにあります。作成したアプリケーションにセットアップ プログラムを添付するときは、セットアップ プログラムから "RegEdit/S アプリケーション名 .reg" を実行する必要があります。/S オプションは "静かな (silent)" という意味です。つまり、コマンドが正常に終了したときは、ダイアログを表示しないということです。それ以外の場合は、アプリケーションのユーザーが直接レジストリ エディタを実行するように指示します。

839sc8ca.alert_note(ja-jp,VS.90).gifメモ :

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

レジストリ エディタは、.reg テキスト ファイルの内容を登録データベースにマージします。また、データベースの内容を検証または修復するときにも、レジストリ エディタを実行します。このとき、OLE の基本エントリを削除しないように注意してください。Windows 95、Windows 98、および Windows ME では、レジストリ エディタのファイル名は RegEdit.exe です。Windows NT および Windows 2000 の場合は、RegEdit32.exe です。

サーバーの初期化

アプリケーション ウィザードを使ってサーバー アプリケーションを作成すると、初期化処理はすべて自動的に行われます。ここでは、アプリケーション ウィザードを使わずにサーバー アプリケーションを直接作成するときの初期化処理について説明します。

サーバー アプリケーションが OLE コンテナ アプリケーションによって起動されると、OLE システム DLL はコマンド ラインに "/Embedding" オプションを付けてサーバーを起動します。サーバー アプリケーションの動作は、コンテナによって起動されたかどうかによって異なります。そこで、アプリケーションは、起動されると、最初にコマンド ラインのオプション "/Embedding" または "-Embedding" の有無を調べます。このスイッチが存在する場合、サーバーを埋め込み先編集が有効になっている状態、または完全にオープンな状態にするための、さまざまなリソース セットが読み込まれます。詳細については、「メニューとリソース : サーバーの変更点」を参照してください。

また、サーバー アプリケーションは、コマンド ラインを解析するための CWinApp::RunEmbedded 関数も呼び出します。この関数が 0 以外の値を返したときは、コンテナ アプリケーションによって起動されているので、独立したアプリケーション ウィンドウを表示できません。この関数は、システム登録データベース内のそのアプリケーションのエントリを更新し、メンバ関数 RegisterAll を呼び出して、インスタンスを登録します。

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

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

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

参照

概念

MFC の OLE

サーバー

参照

CWinApp::RunAutomated

CWinApp::RunEmbedded

COleTemplateServer クラス