タイプ ライブラリ情報のインポート時に生成されるコード
タイプ ライブラリ情報のインポート への移動
タイプ ライブラリをいったんインポートすると、生成された TypeLibName_TLB ユニットの内容を確認できます。 冒頭に以下のものがあります。
1. 最初に、タイプ ライブラリとそのインターフェイスおよび CoClass の GUID のシンボル名を定義する定数宣言があります。 これらの定数の名前は以下のように生成されます。
- タイプ ライブラリの GUID は LBID_TypeLibName の形式(TypeLibName はタイプ ライブラリ名)になります。
- インターフェイスの GUID は IID_InterfaceName の形式(InterfaceName はインターフェイス名)になります。
- ディスパッチ インターフェイスの GUID は DIID_InterfaceName の形式(InterfaceName はディスパッチ インターフェイス名)になります。
- CoClass の GUID は CLASS_ClassName の形式(ClassName は CoClass 名)になります。
- コンパイラ指令 VARPROPSETTER はオン(ON)になります。 これにより、プロパティ設定アクセサ メソッドのパラメータ リストで var キーワードを使用できるようになります。 この場合、パラメータを参照渡しでなく値渡しにするようなコンパイラ最適化は無効になります。 Delphi 以外の言語で作成されたコンポーネントの TLB ユニットを作成する場合は、VARPROPSETTER 指令をオンにする必要があります。
2. 2 番目に、タイプ ライブラリ内の CoClass の宣言があります。 これらは各 CoClass とそのデフォルト インターフェイスのマッピングを定義します。
3. 3 番目に、タイプ ライブラリ内のインターフェイスとディスパッチ インターフェイスの宣言があります。
4. 4 番目に、VTable(仮想テーブル)バインディングをサポートするデフォルト インターフェイスを持つ CoClass ごとにクリエータ クラスの宣言があります。 クリエータ クラスには、Create と CreateRemote という 2 つのクラス メソッドがあります。Create は CoClass をローカルにインスタンス化するのに使用でき、CreateRemote はリモートにインスタンス化するのに使用できます。これらのメソッドは CoClass のデフォルト インターフェイスを返します。
これらの宣言は、CoClass のインスタンスの作成とそのインターフェイスへのアクセスに必要なものを提供します。 開発者は、CoClass にバインドしてそのインターフェイスを呼び出すユニットの uses 句に、生成された TypeLibName_TLB.pas ファイルを追加するだけです。
メモ: タイプ ライブラリ エディタやコマンドライン ユーティリティ TLIBIMP を使用したときも、TypeLibName_TLB ユニットの上記部分が生成されます。
ActiveX コントロールを使用する場合は、上記の宣言に加えて、生成された VCL ラッパーも必要です。 VCL ラッパーは、そのコントロールのウィンドウ管理に関する処理を行います。 [コンポーネントのインポート]ダイアログで他の CoClass の VCL ラッパーが生成された場合もあります。 これらの VCL ラッパーを使用すると、サーバー オブジェクトの作成とそれらのメソッドの呼び出しが簡単になります。 イベントに応答するクライアント アプリケーションを作成する場合は、これらの使用を特にお勧めします。
生成された VCL ラッパーの宣言は、interface セクションの一番下に記載されます。 ActiveX コントロールのコンポーネント ラッパーは、Vcl.OleCtrls.TOleControl の下位クラスです。オートメーション オブジェクトのコンポーネント ラッパーは、Vcl.OleServer.TOleServer から派生しています。生成されたコンポーネント ラッパーは、CoClass のインターフェイスで公開されるプロパティ、イベント、メソッドを追加します。 このコンポーネントは、他のあらゆる VCL コンポーネントと同様に使用できます。
警告: 生成された TypeLibName_TLB ユニットを編集しないでください。 このユニットは、タイプ ライブラリが更新されるたびに再生成されるため、変更しても上書きされます。
メモ: 生成されたコードに関する最新情報については、自動生成された TypeLibName_TLB ユニット内のコメントを参照してください。