[ Client編 2 ]

オートメーションクライアントの作成

Xここでは前の章で作成したActiveXサーバーを使用するクライアントの開発方法を紹介する。

いきなり開発

X早速開発に入る。エクセルの時と同じようにタイプライブラリの取り込みをする。方法はそっちを参照していただきたい。タイプライブラリを追加したらそのユニットを uses 節に追加する。

uses
  AcidPrj_TLB;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);  
var
  objAcid  :  IAcidObj;
begin
  objAcid       :=  CoAcidObj.Create;
  objAcid.Text  :=  'Hello Automation';
  objAcid.ShowMsg;
end;

CreateOleObject関数の代わりにCo〜.Createを使用する。これはタイプライブラリに記述してあるCoClassのメソッドである。このメソッドはインターフェイスへのポインタを返す。
ではクライアントが呼び出した CoAcidObj.Create の内容はどこにあるのか?タイプライブラリの implemetation 部にそのコードはある。

uses
  ComObj;

class function CoAcidObj.Create: IAcidObj;
begin
  Result := CreateComObject(Class_AcidObj) as IAcidObj; 
end;

ここでは CreateComObject関数を使用してCOMオブジェクトのインスタンスを生成している。この関数の戻り値はIUnknown型である。これをIAcidObj型にキャストして返している。COMプログラミングではこのキャストが非常に重要になる。なぜならすべてのインターフェイスはIUnknown型から派生している。よって、どんなインターフェイスを要求されても代入互換が生まれる。
クライアントのコードもこれだけである。これでCOMをベースにした新しいオートメーションシステムの完成である。万歳!

おまけ

今回つくったオートメーションサーバーは当然、他のインタプリタ言語(VBのアダ名)やマクロ言語(VBAの事)からでも利用可能である。例えばマイクロソフトの開発ツールであるVisualBasicなら以下のように記述する。これ以外にも方法があるのかも知れないがDelphiとは無関係なのでこれ以上の調査はしない。

Dim  objAcid  As ObjectSet

objAcid  =  CreaetObject("AcidPrj.IAcidObj")  
objAcid.Text  =  "Hello Automation"
objAcid.ShowMsgSet  
objAcid  =  Nothing



Delphi Acid Floor -TechDocs- Copyright 1997 Toyota