[ Server編 ]
オートメーションとは
Xオートメーションについての説明は前のクライアント編でかなり適当に説明しているのでそっちを参照していただきたい。さて、この章ではサーバーの開発方法をやっぱり適当に紹介する。インプロセスやアウトプロセス(ローカルサーバ)はそれぞれ ActiveX DLLやActiveX Exe に改名されている。DLLはインプロセス、Exeがアウトプロセスである。 Delphi 3 でもこの二種類のサーバーが構築可能である。しかし作成は方法はD elphi 2.0 のそれとはまったく違う。
ActiveXサーバーの作成
Xインプロセスサーバーはその名の通りクライアントのプロセス内で動作するのでリモートでは使用できない(Transaction Serverを使うと違うらしいが)。アウトプロセスは別プロセスで動作する。インプロセスはオートメーションサーバ以外にもActiveXコントロール(OCX)なども含まれる。では作成方法に入る。ここでは Textプロパティを持ち、ShowMsgでそのTextの内容をメッセージボックスで表示する簡単なサーバーを作成する。
1.プロジェクトの新規作成をする。次にインプロセスの場合は[ActiveX]ページの"ActiveXライブラリ"を、アウトプロセスの場合は[新規作成]ページの"アプリケーション"を選択する。これらはそれぞれプロジェクトファイルとなる。
2.Exeサーバーの場合はフォームが必要無いように思われるがこれをプロジェクトから削除してはいけない。フォームを削除するとExeサーバーは起動後にすぐ、終了してしまう。しかし、一般的にExeサーバーはGUIを持たない。よってフォームにはボタンも無い。それが一瞬でも表示されるのは余りカッコ良くない。そこでプロジェクトソースを開き次の一文を入れておく。これでフォームは表示されなくなる。
begin Application.Initialize; Application.ShowMainForm := False; Application.CreateForm(TForm1, Form1); Application.Run; end.3.次にオートメーションオブジェクトの作成に入る。このオートメーションオブジェクトがタ際にクライアントに操作されるオブジェクトとなる。[ファイル]-[新規作成]-[ActiveX]-[オートメーションオブジェクト]を選ぶ。
4.オートメーションオブジェクトウィザードのダイアログが表示される。ここにクラス名とインスタンスの生成についての情報を入れる。クラス名はObjectPascal流のTで始まるクラス名をつけると後でインターフェイスを意味するIが頭に付き、訳が分からなくなるのでここでは付けない事にする。インスタンスの生成は Internal、Single、Multipleの3つから選ぶ。Multipleなら複数のアプリから起動されてもそれぞれにサーバーが生成される。Singleの場合はひとつのサーバーが各アプリのサーバーとなる。Internalは外部からは生成できない。
5.タイプライブラリエディタが表ヲされる。ここでこのサーバーオブジェクトに実装するインターフェイスを作成する。ここではTextプロパティとShowMsgメソッドを定義する。
6.IAcidObjを左のペインから選び[Property]ボタンをクリックすると新しいプロパティが追加される。この名前を"Text"に変更し、右のペインの"宣言:"の型を書き換える。Textプロパティは文字列のため型をWideStringとする。オートメーションで使用する文字列型はWideString型なので注意。
7.次は"ShowMsg"メソッドを追加する。[Method]ボタンをクリックして新しいメソッドを作成する。
8.ここまできたら[更新]ボタンをクリックしてインターフェイスをPascalコードに変換する。保存をしたらタイプライブラリエディタを閉じる。後でインターフェイスを追加する事もできる。ここではユニット名に"Main.pas"、プロジェクト名に"AcidPrj.Dpr"と付けた。
9.さてユニットのコードの中を見てみるとすでにメソッドとプロパティのスケルトンが生成されている。これにコードを付け足していく。まずはTextプロパティのフィールド(メンバ変数)をPrivateに作成する。この辺は好みによるかもしれない。
type TAcidObj = class(TAutoObject, IAcidObj) protected function Get_Text: WideString; safecall; procedure Set_Text(const Value: WideString); safecall; procedure ShowMsg; safecall; private fText : string; end;10.次は各プロパティとメソッドを記述する。ShowMsgメソッドではメッセージボックス(ShowMessage)を使用するのでuses節にDialogsユニットを追加しておく。コードは以下の通りである。非常に手抜きだがそれは我慢していただきたい。
uses ComServ, Dialogs; function TAcidObj.Get_Text: WideString; begin Result := fText; end; procedure TAcidObj.Set_Text(const Value: WideString); begin fText := Value; end; procedure TAcidObj.ShowMsg; begin ShowMessage (fText); end;11.ここまで来れば完成したも同然。コンパイルが通ったら次はお決まりのレジストリ登録を行う。DLLの場合は[実行]メニューから[ActiveXサーバーの登録]を、Exeの場合は[実行]メニューから[実行時引数...]を指定し引数に /Regserver を指定して実行を行う。これでレジストリに登録され、クライアントから利用できるようになる。DLLで、なおかつ既にクライアントアプリがある場合は Delphi3 の新しいデバッグ方法も使用できる。[実行]-[実行時引数]でホストアプリケーションにそのアプリの絶対パスを記述すればよい。
12.ここまでが簡単ではあるがサーバーの開発方法になる。タイプライブラリエディタを表示するには[表示]-[タイプライブラリ]を選べばよい。インターフェイスの追加が可能になる。次の章ではこのコンポーネントを使用したクライアントアプリの開発方法を紹介する。