この特集のトップページへ
Chapter 2:Component Object Model

head1.gif 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 参照設定

fig2-06.gif


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 オブジェクトブラウザ

fig2-07.gif

 なお,Visual Basicでは,参照設定しないでCOMコンポーネントを利用することもできる。しかしこの場合,次のような2つの問題が生じるので,必ず参照設定する癖をつけておいたほうがよい。

  1. 実行が遅くなる
  2. ディストリビューションウィザードでセットアッププログラムを作成したとき,アプリケーションから呼び出すCOMコンポーネントを提供しているCOMサーバー(dllファイルやocxファイル)がセットアッププログラムに含まれない

2) COMコンポーネントを使う

 参照設定すると,そのCOMコンポーネントが使っている定数や型の情報が取り込まれる。

 たとえば,ADOコンポーネントの場合には,ADOコンポーネントに含まれるConnectionオブジェクトはADODB.Connectionという型になる。そのため,Connectionオブジェクトを使うにあたっては,このConnectionオブジェクトを保持する変数を次のようにして宣言する。もちろん,このときの変数名は,どのようなものでもかまわない。

   Dim objADOConnection As ADODB.Connection

 次にCOMコンポーネントを使うわけだが,これには2つの方法がある。

  1. Newキーワードを使う方法
     1つ目の方法は,Newキーワードを使って,次のように利用する方法である。
       Set objADOConnection = New ADODB.Connection
    
  2. CreateObject関数を使う方法
     もう1つの方法は,CreateObject関数を使って,次のように利用する方法である。
       Set objADOConnection = CreateObject("ADODB.Connection")
    

 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で解説する)。

prevpg.gif Chapter 2 5/15 nextpg.gif