タイプ ライブラリ
COM 拡張機能 への移動
タイプ ライブラリは、オブジェクトのインターフェイスから決定可能なオブジェクトの型情報よりも多くの情報を取得できる手段となります。タイプ ライブラリに含まれている型情報は、(指定された CLSID の)特定のオブジェクトに存在するインターフェイス、各インターフェイスに存在するメンバ関数、それらの関数に必要な引数など、オブジェクトとそのインターフェイスに関する必要な情報を提供します。
型情報を取得するには、オブジェクトの実行中のインスタンスにクエリを発行するか、タイプ ライブラリを読み込んで読み取るか、のどちらかです。この情報があれば、必要なメンバ関数やそれらのメンバ関数に渡す情報が特にわかるので、目的とするオブジェクトを使用するクライアントを実装できます。
オートメーション サーバーのクライアント、ActiveX コントロール、トランザクション オブジェクトでは、型情報が使用可能であることを想定しています。Delphi のすべてのウィザードでは、タイプ ライブラリを自動的に生成します。ただし、COM オブジェクト ウィザードではその生成はオプションです。GenTLB.exe ユーティリティを使用して RIDL ファイルから .tlb ファイルを作成することにより、この型情報を表示したり編集することができます。
目次
タイプ ライブラリの内容
タイプ ライブラリには型情報が含まれています。この情報は、さまざまな COM オブジェクトに存在するインターフェイスのほか、インターフェイス メソッドの引数の型や数も示します。これらの記述には、CLSID(CoClass の一意識別子)と IID(インターフェイス識別子)のほかにオートメーション インターフェイスのメソッドやプロパティの dispID(ディスパッチ識別子)も含まれているため、それらに適切にアクセスすることができます。
タイプ ライブラリには、次の情報も含まれている場合があります。
- カスタム インターフェイスに関連付けられているカスタム型情報の説明
- オートメーション サーバーや ActiveX サーバーからエクスポートされたルーチン(インターフェイス メソッドを除く)
- 列挙体、レコード(構造体)、共用体、エイリアス、モジュールの各データ型に関する情報
- 他のタイプ ライブラリからの型記述への参照
タイプ ライブラリの作成
従来の開発ツールでは、IDL(インターフェイス定義言語)や ODL(オブジェクト記述言語)でスクリプトを作成し、そのスクリプトをコンパイルすることによってタイプ ライブラリを作成します。ただし、Delphi を使用する場合は、[新規作成]ダイアログの[ActiveX]ページまたは[多層サポート]ページから起動されるウィザードを使って COM オブジェクト(ActiveX コントロール、オートメーション オブジェクト、リモート データ モジュールなど)を作成すると、タイプ ライブラリが自動的に生成されます。また、[ファイル|新規作成|その他...]を選択し、[Delphi プロジェクト]または[C++Builder プロジェクト]から[ActiveX]フォルダを選択して、右ペインから[タイプ ライブラリ]を選択することにより、タイプ ライブラリを作成することもできます。
メモ: RAD Studio のタイプ ライブラリでは、IDL ではなく RIDL を使用します。
Delphi のタイプ ライブラリ エディタを使って、タイプ ライブラリを表示したり編集することができます。Delphi では、タイプ ライブラリを保存すると、それに対応する .tlb
ファイル(バイナリのタイプ ライブラリ ファイル)が自動的に更新されます。ウィザードで作成したインターフェイスや CoClass をタイプ ライブラリ エディタで変更する場合も、ユーザーの実装ファイルが自動的に更新されます。
タイプ ライブラリを使用すべき場合
たとえば、外部のユーザーに公開するオブジェクト セットごとにタイプ ライブラリを作成することが重要です。
- ActiveX コントロールではタイプ ライブラリが必要です。この場合、タイプ ライブラリは、ActiveX コントロールが格納されている DLL にリソースとして含まれている必要があります。
- カスタム インターフェイスの vtable バインディングをサポートしている公開オブジェクトは、タイプ ライブラリに記述する必要があります(vtable 参照がコンパイル時にバインドされるからです)。クライアントでは、インターフェイスに関する情報をタイプ ライブラリからインポートし、その情報を使用してコンパイルします。vtable とコンパイル時バインディングの詳細については、「オートメーション インターフェイス」を参照してください。
- オートメーション サーバーを実装するアプリケーションでは、クライアントが事前にバインドできるように、タイプ ライブラリを用意する必要があります。
- IProvideClassInfo インターフェイスをサポートしているクラス(たとえば VCL の TTypedComObject クラスのすべての下位クラスなど)からインスタンス化されたオブジェクトには、タイプ ライブラリが必要です。
- タイプ ライブラリは必須ではありませんが、OLE ドラッグ アンド ドロップで使用されたオブジェクトを特定する場合に役に立ちます。
(アプリケーション内で)内部的に使用するためのインターフェイスを定義する場合は、タイプ ライブラリを作成する必要はありません。
タイプ ライブラリへのアクセス
バイナリのタイプ ライブラリは通常、リソース ファイル(.res)の一部か .tlb ファイル拡張子のスタンドアロン ファイルです。リソース ファイルに含まれている場合は、タイプ ライブラリをサーバー(.dll、.ocx、.exe)にバインドできます。
タイプ ライブラリがいったん作成されると、オブジェクト ブラウザ、コンパイラ、および同様のツールでは、下記の特別なタイプ インターフェイスを通じてタイプ ライブラリにアクセスできます。
特別なタイプ インターフェイス
インターフェイス | 説明 |
---|---|
ITypeLib |
型記述のライブラリにアクセスするためのメソッドが用意されています。 |
ITypeLib2 |
ドキュメント文字列、カスタム データ、タイプ ライブラリの統計情報をサポートするように ITypeLib を拡張したもの。 |
ITypeInfo |
これを使用すれば、タイプ ライブラリに含まれている個々のオブジェクトの記述にアクセスできるようになります。たとえば、ブラウザがこのインターフェイスを使用して、タイプ ライブラリからオブジェクトに関する情報を抽出するといったことが可能です。 |
ITypeInfo2 |
カスタム データ要素にアクセスするためのメソッドなどの追加のタイプ ライブラリ情報にアクセスできるように ITypeInfo を拡張したもの。 |
ITypeComp |
これを使用すれば、インターフェイスにバインドするときにコンパイラに必要な情報にすばやくアクセスできるようになります。 |
[コンポーネント|コンポーネントのインポート...]をクリックすることにより、他の Delphi アプリケーションからタイプ ライブラリをインポートして使用することができます。COM アプリケーションに使用される VCL クラスの大半では、オブジェクトの実行中のインスタンスやタイプ ライブラリに対する型情報の格納や取得に不可欠なインターフェイスをサポートしています。VCL クラス TTypedComObject は、タイプ情報を取得するためのインターフェイスをサポートしており、ActiveX オブジェクト フレームワークの基盤として使用されます。
タイプ ライブラリ使用の利点
たとえアプリケーションでタイプ ライブラリが必要なくても、タイプ ライブラリを使用した場合の下記の利点を考慮してはどうでしょうか。
- コンパイル時に型チェックを実行できます。
- オートメーションとの事前バインディングを使用でき、また、vtable やデュアル インターフェイスをサポートしていないコントローラでコンパイル時に dispID をエンコードできるため、実行時のパフォーマンスが向上します。
- 型ブラウザでライブラリをスキャンできるため、クライアント側でユーザーのオブジェクトの特性を表示できます。
- RegisterTypeLib 関数を使用して、公開したオブジェクトを登録データベースに登録できます。
- UnRegisterTypeLib 関数を使用して、アプリケーションのタイプ ライブラリをシステム レジストリから完全にアンインストールできます。
- オートメーションではタイプ ライブラリから得られる情報を使用して、別のプロセスでオブジェクトに渡されるパラメータをパッケージ化するので、ローカル サーバー アクセスが向上します。
- GenTLB.exe は Embarcadero 提供のユーティリティで、RIDL ファイル(タイプ ライブラリ エディタで使用されるテキストベースの中間ファイル)から .tlb ファイルを生成します。
タイプ ライブラリ ツールの使用
タイプ ライブラリを操作するためのツールを以下に示します。
- TLIBIMP.EXE(タイプ ライブラリ インポート ツール)は、既存のタイプ ライブラリを引数として受け取り Delphi インターフェイス ファイル(_TLB.pas ファイル)を作成するものですが、これはタイプ ライブラリ エディタに組み込まれています。TLIBIMP には、タイプ ライブラリ エディタ内では使用できない追加の構成オプションが用意されています。
- TRegSvr.exe は、Delphi に付属しているツールで、サーバーやタイプ ライブラリの登録および登録解除を行うためのものです。なお、[スタート|プログラム|Embarcadero RAD Studio Athens|サンプル] を選択したあと
\Object Pascal\VCL\tregsvr
ディレクトリを開くと、TRegSvr のソースを参照できます。 - RIDL(Embarcadero の制限付きインターフェイス定義言語)
- MIDL(Microsoft IDL コンパイラ)では、IDL スクリプトをコンパイルしてタイプ ライブラリを作成します。
- RegSvr32.exe は標準の Windows ユーティリティで、サーバーやタイプ ライブラリの登録および登録解除を行うためのものです。
- OLEView はタイプ ライブラリ ブラウザ ツールで、Microsoft の Web サイトから入手できます。