[ 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をベースにした新しいオートメーションシステムの完成である。万歳!
おまけ
x今回つくったオートメーションサーバーは当然、他のインタプリタ言語(VBのアダ名)やマクロ言語(VBAの事)からでも利用可能である。例えばマイクロソフトの開発ツールであるVisualBasicなら以下のように記述する。これ以外にも方法があるのかも知れないがDelphiとは無関係なのでこれ以上の調査はしない。
Dim objAcid As ObjectSet objAcid = CreaetObject("AcidPrj.IAcidObj") objAcid.Text = "Hello Automation" objAcid.ShowMsgSet objAcid = Nothing