次の方法で共有


登録

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

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

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

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

サーバーのインストール

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

注意

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

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

注意

アプリケーション ウィザードによって生成された .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関数は 3 つのパラメーターを受け取ります。サーバーのCLSIDへのポインター、CDocTemplateオブジェクト、およびサーバーの複数インスタンスをサポートするかどうかを示すフラグ。 ミニサーバーは、複数のインスタンスをサポートする必要があります。つまり、コンテナーごとにサーバーのインスタンスを起動して同時に実行する必要があります。 したがって、ミニサーバーを起動するときは、このフラグに TRUE を渡す必要があります。

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

参照

参照

CWinApp::RunAutomated

CWinApp::RunEmbedded

COleTemplateServer クラス

概念

MFC の OLE

サーバー