タイプ ライブラリの要素
タイプ ライブラリでの作業:インデックス への移動
タイプ ライブラリ エディタに表示されるタイプ ライブラリ インターフェイスは、最初は非常に複雑に見えます。なぜなら、それぞれ独自の特性を持つ、非常に多くの要素に関する情報を表すためです。しかし、これらの属性の多くは、すべての要素に共通です。たとえば、どの要素にも(タイプ ライブラリ自体も含めて)次の属性があります。
- [名前]。要素を説明し、コード内でこの要素を参照するときに使用します。
- [GUID](グローバル一意識別子)。COM が要素を識別するために使用する 128 ビットの一意の値です。これは、タイプ ライブラリ自体に対して、また CoClass とインターフェイスに対しては、常に指定する必要があります。他の場合は、オプションです。
- [バージョン] 番号。複数のバージョンの要素を区別します。これは通常オプションですが、CoClass とインターフェイスに対しては指定する必要があります。ツールによっては、バージョン番号がないと使用できないものがあるからです。
- [ヘルプ] プロパティは、[ヘルプ] トピックに要素をリンクします。ヘルプ文字列、およびヘルプ コンテキストまたはヘルプ文字列コンテキストの値があります。ヘルプ コンテキストは、タイプ ライブラリがスタンドアロンのヘルプ ファイルを持つ従来の Windows ヘルプ システム用に使用します。それに対して、ヘルプが独立した DLL として提供される場合には、ヘルプ文字列コンテキストを使用します。ヘルプ コンテキストやヘルプ文字列コンテキストは、タイプ ライブラリの 属性 ページで指定するヘルプ ファイルや DLL を参照します。これは、常にオプションです。
インターフェイス
インターフェイスは、仮想関数テーブル(vtable)からアクセスする必要のあるオブジェクトのメソッド(および get および set 関数で表現されるプロパティ)を記述します。インターフェイスの [デュアル] フラグがオンになっている場合、IDispatch からインターフェイスを継承し、オブジェクトにより先にバインドされた vtable アクセスと、OLE オートメーションによってバインドされるランタイムの両方を提供することができます。デフォルトでは、タイプ ライブラリでは、追加するインターフェイスすべてについて [デュアル] のフラグをオンにします。
インターフェイスには、メンバ(メソッドとプロパティ)を割り当てることができます。これらは、オブジェクト リスト ペインにインターフェイス ノードの子として表示されます。インターフェイスのプロパティは、プロパティの基になるデータの読み取りや書き込みに使用する get および set メソッドで表されます。これらは、ツリー形式でそれぞれの目的を表す特殊なアイコンを使って表示されます。
'get' メソッドと 'set' メソッドの特殊アイコン:
値プロパティ関数による書き込み(set、put)。 | |
参照プロパティ関数による読み取り(get)|書き込み(set、put)。 | |
読み取り(get)プロパティ関数。 |
メモ: [参照による書き込み]: [参照による書き込み] としてプロパティが指定されると、値ではなくポインタとして渡されます。Visual Basic など、アプリケーションによっては、[参照による書き込み] があり、それによってパフォーマンスを最適化します。プロパティを値ではなく参照としてのみ渡すには、プロパティ タイプ [参照のみ] を使用します。プロパティを、値とあわせて参照としても渡すには、読み取り > 書き込み > 参照による書き込み を選択します。このメニューを呼び出すには、ツールバーからプロパティ アイコンの横の下向き矢印を選択します。
プロパティやメソッドを、ツールバー ボタンやオブジェクト リスト ペインのコンテキスト メニューから追加した後、そのプロパティやメソッドを選択し、その型情報の各種ページを使用して構文と属性を記述します。
[属性] ページでは、プロパティやメソッドに名前とディスパッチ IDを指定できます(そうすると、IDispatch を使用して呼び出せます)。プロパティに対しては、型も割り当てます。[パラメータ] ページで関数シグニチャを作成します。このページではパラメータの追加、削除、並べ替え、型と修飾子の設定、および関数の戻り値の型の指定ができます。
メモ: 例外発生を必要とするインターフェイスのメンバは HRESULT を返すようにし、実際の戻り値のため戻り値のパラメータ(PARAM_RETVAL)を指定する必要があります。これらのメソッドを safecall 呼び出し規約に従って宣言します。
プロパティとメソッドをインターフェイスに割り当てる際、関連する CoClass にも暗黙のうちに割り当てられます。これは、タイプ ライブラリ エディタがプロパティやメソッドを CoClass に直接追加できないようになっているからです。
ディスパッチ インターフェイス
オブジェクトのプロパティやメソッドの記述には、一般的に、ディスパッチ インターフェイスよりインターフェイスが使用されます。ディスパッチ インターフェイスは動的バインディングからのみアクセス可能ですが、インターフェイスは vtable による静的バインディングが可能です。
ディスパッチ インターフェイスへのメソッドやプロパティの追加は、インターフェイスへの追加と同様に行えます。しかし、ディスパッチ インターフェイス用のプロパティを作成する場合は、関数の種類やパラメータの型は指定できません。
CoClass
CoClass は、1 つ以上のインターフェイスを実装する一意の COM オブジェクトを記述します。CoClass を定義するときは、実装されるインターフェイスのどれがそのオブジェクトのデフォルトになるかを必ず指定し、また、どのディスパッチ インターフェイスがイベントのデフォルト ソースかを必要に応じて指定します。タイプ ライブラリ エディタではプロパティやメソッドを CoClass には追加しないので注意してください。プロパティとメソッドは、インターフェイス経由でクライアントに示され、そのインターフェイスは [実装] ページで CoClass に関連付けます。
型定義
列挙体、エイリアス、レコード、およびユニオンはすべて型を宣言し、その型はタイプ ライブラリ内の各所で使用できます。
列挙体は、コンテンツのリストで構成され、それぞれ数値でなければなりません。数値の入力は通常、10 進数の整数または 16 進数形式で行います。デフォルトでは、ベース値はゼロです。列挙体に定数を追加できます。オブジェクト リスト ペインにある列挙体を選択し、[Const](Const の新規作成)ボタンをクリックするか、オブジェクト リスト ペインのコンテキスト メニューから 新規作成 > Const コマンドを選択します。
メモ: その列挙体の意味が明確になるよう、ヘルプ文字列を指定することを強くお勧めします。次に示すのは、マウス ボタン用列挙型の入力例です。各列挙型要素のヘルプ文字列も含んでいます。
mbLeft = 0 [helpstring 'マウスボタン左'];
mbRight = 1 [helpstring 'マウスボタン右'];
mbMiddle = 3 [helpstring 'マウスボタン中'];
typedef enum TxMouseButton
{
[helpstring("マウスボタン左")]
mbLeft = 0,
[helpstring("マウスボタン右")]
mbRight = 1.
[helpstring("マウスボタン中")]
mbMiddle = 2
} TxMouseButton;
エイリアスは、型のエイリアス(型定義)を作成します。そのエイリアスを使用して、レコードやユニオンなどの他の型情報の中で使用する型を定義できます。[属性] ページにある [型] 属性を設定して、エイリアスを基本の型定義に関連付けます。
レコードは、構造体メンバまたはフィールドのリストから構成されます。ユニオンは、可変部分のみを持つレコードです。レコード同様、ユニオンは構造体メンバまたはフィールドのリストから構成されます。しかし、レコードのメソッドとは異なり、ユニオンの各メンバは、同じ物理アドレスを使用するため、格納できる論理値は 1 つだけです。
レコードまたはユニオンにフィールドを追加できます。オブジェクト リスト ペインでレコードまたはユニオンを選択し、[Field](Field の新規作成)ボタンをクリックするか、オブジェクト リスト ペインのコンテキスト メニューから 新規作成 > Field コマンドを選択します。各フィールドには名前と型がありますが、それらは、フィールドを選択して、[属性] ページで値を指定して割り当てることができます。レコードとユニオンは、オプションのタグで定義できます。
メンバは任意のビルトイン型にしたり、レコードを定義する前にエイリアスを使って指定したりできます。
モジュール
モジュールは関数グループ、主に DLL エントリ ポイント セットを定義します。モジュールは、次のように定義します。
- [属性] ページでモジュールが表す DLL を指定します。
- ツールバーまたはオブジェクト リスト ペインのコンテキスト メニューを使用して、メソッドと定数を追加します。次に、メソッドまたは定数それぞれに、属性を定義します。オブジェクト リスト ペインでメソッドまたは定数を選択し、[属性] ページで値を設定します。
モジュール メソッドの場合、[属性] ページで名前と DLL エントリ ポイントを割り当てる必要があります。[パラメータ] ページで、関数のパラメータと戻り値の型を宣言します。
モジュール定数の場合、[属性] ページで名前、型、値を指定します。
メモ: タイプ ライブラリ エディタ は、モジュールに関連する宣言や実装は生成しません。指定された DLL は、別のプロジェクトとして作成する必要があります。