この特集のトップページへ
>
Chapter 2:Component Object Model
2.2 Visual BasicでCOMコンポーネントを使うには
少々概念的な説明が続いたが,ここでVisual BasicでどのようにCOMコンポーネントを使うのかについて説明してゆこう(といっても,ほとんどのVisual Basicの開発者は,すでに理解しているものと思う)。
Visual BasicでCOMコンポーネントを使うのは,比較的簡単である。ここでは,データベースアクセスに用いるADOコンポーネントを使う例を示そう。
1) 参照設定する
Visual Basicの統合開発環境のメニューから[プロジェクト]−[参照設定]を選択し,どのCOMコンポーネントを使うのかを宣言する。ADOを使う場合には,表示されるダイアログボックスから,“Microsoft ActiveX Data Objects 2.5 Library”を選択する(Fig.2-6)。
Fig.2-6 参照設定
Microsoft ActiveX Data Objects 2.5 Libraryは,Windows 2000に付属しているバージョンのADOである。もし旧バージョンのADO(Visual Basic 6.0やMicrosoft Access 2000などに付属するバージョン)を使いたければ,“Microsoft ActiveX Data Objects 2.1 Library”を参照設定するとよい。
参照設定すると,そのCOMコンポーネントに含まれているオブジェクトの種類,型,用意されているプロパティとメソッド,使っている定数などの情報が取り込まれる。取り込まれた情報は,メニューから[表示]−[オブジェクトブラウザ]を選択することで参照することができる(Fig.2-7)。
Fig.2-7 オブジェクトブラウザ
なお,Visual Basicでは,参照設定しないでCOMコンポーネントを利用することもできる。しかしこの場合,次のような2つの問題が生じるので,必ず参照設定する癖をつけておいたほうがよい。
- 実行が遅くなる
- ディストリビューションウィザードでセットアッププログラムを作成したとき,アプリケーションから呼び出すCOMコンポーネントを提供しているCOMサーバー(dllファイルやocxファイル)がセットアッププログラムに含まれない
2) COMコンポーネントを使う
参照設定すると,そのCOMコンポーネントが使っている定数や型の情報が取り込まれる。
たとえば,ADOコンポーネントの場合には,ADOコンポーネントに含まれるConnectionオブジェクトはADODB.Connectionという型になる。そのため,Connectionオブジェクトを使うにあたっては,このConnectionオブジェクトを保持する変数を次のようにして宣言する。もちろん,このときの変数名は,どのようなものでもかまわない。
Dim objADOConnection As ADODB.Connection
次にCOMコンポーネントを使うわけだが,これには2つの方法がある。
- Newキーワードを使う方法
- 1つ目の方法は,Newキーワードを使って,次のように利用する方法である。
Set objADOConnection = New ADODB.Connection
- 1つ目の方法は,Newキーワードを使って,次のように利用する方法である。
- CreateObject関数を使う方法
- もう1つの方法は,CreateObject関数を使って,次のように利用する方法である。
Set objADOConnection = CreateObject("ADODB.Connection")
- もう1つの方法は,CreateObject関数を使って,次のように利用する方法である。
Newキーワードを使うかCreateObject関数を呼び出すと,指定したCOMコンポーネントが実体化され,COMオブジェクトが生成される(その過程の詳細はすぐあとで説明する)。そして,そのCOMオブジェクトを指し示す値が変数に格納され,その変数を通じてCOMオブジェクトのプロパティやメソッドを利用できるようになる。このように,COMオブジェクトを実体化して利用する操作を「COMオブジェクトをバインドする」と呼ぶ。
NewキーワードとCreateObject関数の違いは,1) で実行した参照設定の情報を利用するか否かにある。Newキーワードを使う場合には,1) で指定した参照設定の情報を利用するが,2) の場合には利用しない(この違いは次節で説明する)。そのため,参照設定しなかった場合には,Newキーワードでオブジェクトを実体化することはできない。
本連載では,以下,COMオブジェクトをCreateObject関数で実体化する方法に統一して説明するが,Newキーワードを使ってもらってもかまわない。
3) COMオブジェクトのメソッドとプロパティを利用する
2) の作業によって,指定した変数を通じてCOMオブジェクトが利用できる。ADOコンポーネントのConnectionオブジェクトには,データベースを開くOpenというメソッドがあり,たとえばODBCシステムデータソースとして定義されているSampleというデータベースを開くには,次のようにする(データベースの接続文字列については,「Appendix A ADOコンポーネントによるデータベースアクセス」を参照)。
objADOConnection.Open "DSN=Sample"
4) COMオブジェクトを解放する
利用したCOMオブジェクトは,利用が終わった時点で解放する必要がある。COMオブジェクトを解放するためには,COMオブジェクトを保持している変数にNothingを代入する。
Set objADOConnection = Nothing
ただし,Visual Basicでは,明示的にNothingを代入しなくても,そのオブジェクトを指し示す変数がなくなった時点(たとえば,Functionプロシージャ内やSubプロシージャ内でCOMオブジェクトを利用した場合,そのFunctionプロシージャやSubプロシージャから戻った時点)で,自動的に利用していたCOMオブジェクトは解放される。
しかし,COMオブジェクトは実体化しているだけでリソースを消費しているので,不要になったならば,速やかにそのCOMオブジェクトを保持している変数にNothingを代入して明示的に解放する癖を付けたほうがよい。特に,MTSやCOM+環境では,COMクライアントが速やかにCOMオブジェクトを解放することが全体のパフォーマンス向上につながる(このしくみについてはChapter 4で解説する)。
Chapter 2 5/15 |