この特集のトップページへ
>
Chapter 4:データストア層の構築
4.2 COM+を使ってみる
あれこれと理屈を説明するよりも,まずは実際に動作させてみたほうが理解は早まると思われるので,ここで簡単なCOMコンポーネントを作り,COM+の利用方法を説明しておくことにする。
とはいっても,実際のところCOM+を使うこと自体は,非常に簡単である。作成したCOMコンポーネントを,[コンポーネントサービス]管理ツールの[コンピュータ]−[マイコンピュータ]−[COM+アプリケーション]の配下に登録するだけでよい。
なお,本節で作成するCOMコンポーネントは一般的なCOMコンポーネントであって,COM+の独自機能を使うものではないし,COM+で管理するために最適化したものでもない。本来ならば,COM+で管理するCOMコンポーネントは,汎用的な動作をサポートするために適切にプロパティページの情報を読み取る仕組みを備えるべきであり,また,COM+で管理されることを前提に最適化しておいたほうが,パフォーマンス面で有利になる。これらの方法については,次章で説明する。
4.2.1 COMコンポーネントの作成
まずは,Visual Basic 6.0でCOMコンポーネントを作成しよう。COM+に登録するCOMコンポーネントはどのようなものであってもよく,COM+で管理するために特定の何かをしなければならないということではない。
ここでは,「Chapter 2 Component Object Model」の復習もかねて,Table 4-1とTable 4-2に示す2つのCOMコンポーネントを作成することにする。
Table 4-1 complussample.com1
プログラムID |
complussample.com1 |
メソッド |
|
Public Function getMessage() |
“Hello, I'm class1”という文字列を返す。プログラム的に書けば,“getMessage = "Hello I'm com1"”という内容 |
Table 4-2 complussample.com2
プログラムID |
complussample.com2 |
メソッド |
|
Public Function getMessage() |
“Hello, I'm class2”という文字列を返す。プログラム的に書けば,“getMessage = "Hello I'm com2"”という内容 |
この2つのCOMコンポーネントは,Visual Basic 6.0で作成し,1つのdllファイル(COMサーバー)に格納する。
具体的な手順は次のようになる。
1)プロジェクトのプロパティの設定
Visual Basic 6.0で[新しいプロジェクト]を選択し,ActiveX DLLを新規作成する(Fig.4-6)。
Fig.4-6 ActiveX DLLの新規作成
次に,プログラムIDを“complussample.〜”へと変更するため,[プロジェクト]メニューの[Project1のプロパティ]を選択し,プロジェクト名を“complussample”に変更する(Fig.4-7)。
Fig.4-7 プロジェクト名の変更
2)クラスモジュールのプロパティの設定
それでは,クラスモジュールにメソッドを実装してゆくことにしよう。まずは,Table 4-1に示した“complussample.com1”から実装する。始めにすべきことは,プログラムIDを“complussample.com1”にするため,クラスモジュールのプロパティの“(オブジェクト名)”の部分を“com1”へと変更することである(Fig.4-8)。
Fig.4-8 クラスモジュールのオブジェクト名の変更
3)クラスモジュールの実装
次に,クラスモジュールにメソッドを実装する。Table 4-1に示したgetMessageメソッドの実装は,たとえば,List 4-1のようになる(Fig.4-9)。これで,complussample.com1コンポーネントの作成は終了である。
Fig.4-9 complussample.com1コンポーネントのgetMessageメソッドの実装
4)クラスモジュールの追加
次に,Table 4-2に示したcomplussample.com2コンポーネントを実装する。そのために,[プロジェクト]メニューから[クラスモジュールの追加]を選択し,クラスモジュールを追加する(Fig.4-10)。
Fig.4-10 クラスモジュールの追加
「Chapter 2 Component Object Model」では,1つのdllファイルに1つのCOMコンポーネントしか実装しなかったが,このようにクラスモジュールを追加することで,1つのdllファイルにいくつでもCOMコンポーネントを実装することができる。
5)クラスモジュールのプロパティの設定
4)で新しく追加したクラスモジュールのプログラムIDを“complussample.com2”へと変更するため,クラスモジュールのプロパティの“(オブジェクト名)”の部分を“com2”に変更する(Fig.4-11)。
Fig.4-11 クラスモジュールのオブジェクト名の変更
6)クラスモジュールの実装
クラスモジュールにメソッドを実装する。Table 4-2に示したgetMessageメソッドの実装は,たとえばList 4-2のようになる。これで,complussample.com2コンポーネントの作成は終了である。
Fig.4-12 complussample.com2コンポーネントのgetMessageメソッドの実装
7)コンパイル
[ファイル]メニューから[complussample.dllの作成]を選択して,dllファイルを作る。
8)動作確認
以上で,complussample.com1コンポーネントとcomplussample.com2コンポーネントは完成である。Visual Basic上からdllファイルを作った場合には,自動的にシステム(のレジストリ)に登録される。この時点では,COM+ではなく,まだCOMの管理下にある。
COM+の管理下に移すためには,[コンポーネントサービス]管理ツールを使ってCOMコンポーネントをCOM+カタログに登録するのだが,そのまえに,このCOMコンポーネントが正しく実行できるどうかを確かめてみることにする。
COMコンポーネントの動作を確かめるには,さまざまな方法がある。Visual Basicユーザーにとってわかりやすいのは,Visual BasicでCOMクライアントを作ることであろう。その方法でもかまわないが,参照設定したりフォームを作成したりと少々面倒なので,ここではWindows Scripting Host(WSH)からCOMコンポーネントを利用してみる。
Windows Scripting Hostとは,Windows上でVBScriptやJScriptで書かれたスクリプトプログラムを実行するための仕組みである。Windows 98には標準搭載されているほか,Internet Explorer 4.0以降のアドインモジュールとしても提供されている(たとえば,Windows NT 4.0 Option Packなどにも含まれる)。もちろん,Windows 2000には標準搭載される予定となっている。
ここでは,List 4-3に示すスクリプトプログラムを実行することにする。
Windows Scripting Hostをよく知らない読者のために,簡単にList 4-3について説明しておこう。List 4-3は,VBScriptのプログラムである。VBScriptのプログラムをWindows Scripting Hostで実行するときには,拡張子を“.vbs”とする(ちなみにJScriptの場合には拡張子を“.js”とする)。
1行目と2行目では,CreateObject関数を使ってCOMオブジェクトを実体化している。VBScriptでもVisual Basicと同様にCreateObject関数を使ってCOMオブジェクトを実体化する(もしくはWScriptオブジェクトのCreateObjectメソッドを使ってもよい)。ただし,VBScriptはVisual Basicと違い,変数の型という概念がない。よって,Visual Basicで実行する必要がある参照設定やDim文による変数の型宣言は不要となる。なお,VBScriptでは,NewキーワードでCOMオブジェクトを実体化することはできない。
3行目と4行目にあるWScript.Echoメソッドは,引数の内容をそのまま画面に表示するメソッドである。Visual BasicのMsgBox関数に似ているが,ボタンの表示を設定するようなことはできず,単純にメッセージを表示するだけの機能しかもたない(MsgBox関数と似たような機能としてWshShellオブジェクトのPopupメソッドが用意されている。ただし,ここでは詳細を割愛する)。
List 4-3の実行結果は,Fig.4-13のようになる。complussample1.com1コンポーネントとcomplussample2.com2コンポーネントのgetMessageメソッドがそれぞれ正しく呼び出され,結果を受け取っていることを確認してほしい。
Fig.4-13 List 4-3の実行結果
このように,Windows Scripting HostはCOMコンポーネントの動作をチェックするときなどに便利である。Visual Basicを使ってCOMクライアントを作ってもよいが,単なる動作チェックであればVBScriptから操作したほうが簡単だろう。
Chapter 4 3/16 |