この特集のトップページへ
Chapter 8:プレゼンテーション層の構築

8.2.3 ASPからCOMコンポーネントを使う
●タイプライブラリの参照
 Visual Basicでは,参照設定することにより,COMコンポーネント内で定義されている列挙型の値を参照したり,オブジェクトを格納する変数の型を参照したりする。ASPの場合には,参照設定という概念はない。もっとも,オブジェクトを格納する変数の型については,Variant型に格納すればよいわけだから,問題になることはない。問題となるのは,COMコンポーネント内で定義されている列挙型の値(定数値)である。

 たとえば,ADODB.RecordsetオブジェクトのOpenメソッドを使うときには,カーソルの種類を指定するのにadOpenForwardOnlyadOpenDynamicといった定数を,ロックタイプを指定するのにadLockReadOnlyadLockOptimisticといった定数を使う。ASPでは,そのままではこれらの定数を使うことはできず,adOpenForwardOnlyであれば値0を,adOpenDynamicであれば値2を,といった具合に,定数の代わりに数値を使わなければならない。ちなみに,定数に割り当てられた数値は,Visual BasicでCOMコンポーネントを参照設定し,オブジェクトブラウザで見ることができる。しかし,ASPで定数を使うたびにオブジェクトブラウザで値を参照するのは,非常に面倒である(Fig.8-55)。

Fig.8-55 オブジェクトブラウザによる定数の参照
fig8_55

 そこでASPでは,Global.asaファイルのなかに次のような書式のTypeLib宣言を記述することで,指定されたタイプライブラリ内で定義されている定数をそのまま利用することができるようになっている。


<!-- METADATA TYPE="TypeLib"
FILE="ファイル名"
UUID="タイプライブラリのライブラリID"
VERSION="バージョン番号"
LCID="ロケールID"
-->
ファイル名
 タイプライブラリのファイル名を指定する。タイプライブラリは,COMコンポーネントを提供するDLLファイルに含まれることが多く,その場合にはDLLファイルの名前となる。ただし,一部のCOMコンポーネントでは拡張子.tlbを備えたファイルとして提供されていることもあり,その場合にはその拡張子.tlbのファイル名を指定する。いずれの場合にも,ファイル名はフルパスで指定する必要がある。UUID=を指定したときには,FILE=の項目は省略することができる。
 
タイプライブラリのライブラリID
 タイプライブラリのライブラリIDを指定する。たとえば,ADO 2.5のタイプライブラリのライブラリIDは,“00000205-0000-0010-8000-00AA006D2EA4”である。この値は,Visual Studioに付属のOLE/COMオブジェクトビューアで調べることができる。FILE=を指定したときには,UUID=の項目は省略することができる。
 
バージョン番号
 タイプライブラリのバージョン番号を指定する。省略可能である。
 
ロケールID
 タイプライブラリのロケールID(言語情報)を指定する。省略可能である。

 TypeLib宣言ではさまざまなオプションを指定できるが,基本的には,次のようにファイル名だけ記述しさえすればよい。


<!-- METADATA TYPE="TypeLib"
FILE="ファイル名"
-->

 たとえば,ADO 2.5で定義された定数を利用したい場合には,次のように宣言する。


<!-- METADATA TYPE="TypeLib"
FILE="C:\Program Files\Common Files\
      System\ado\msado15.dll"
-->

 すると,上の宣言を含むGlobal.asaファイルを置いた仮想ディレクトリ内に配置されたASPファイルでは,adOpenForwardOnlyadOpenDynamicなど,ADOで定義された定数を利用できるようになる。

 問題は,「どのようにしてFILE=で指定するファイル名を探し出すか」という点である。これには,いくつかの方法がある。たとえば,レジストリを調べたり,OLE/COM Object Viewerを使って調べたりする方法が代表的である。しかし,Visual Basicを利用できるのであれば,Visual Basicで参照設定するときに[場所]の欄に表示されるファイル名を利用するのが,最も手軽な方法といえる(Fig.8-56)。

Fig.8-56 Visual Basicにおける参照設定の画面
fig8_56

Prev 30/43 Next