このドキュメントでは、次のトピックについて説明します。
タイプ情報は、そのインターフェイスのすべてとともに(メソッドの名前とタイプにいたるまで)クラスを完全に記述するための方法です。 それはクラスおよびそれらのインターフェイス、例えば、インターフェイスが存在するクラス、それらのインターフェイスに存在するメンバ関数、およびそれらの関数が必要とする引数についての必要な情報を含みます。
この情報は、例えば、エンドユーザーに有効なオブジェクト、インターフェイス、メソッドおよびプロパティを表示するためのタイプ情報ブラウザで、クラスとそのメソッドについての詳細を見つけ出すためにクライアントによって使用されます。
他にタイプ情報の使用で重要な点は、NaturalX も使用する、広く使われている OLE オートメーションテクニックです。
タイプ情報を保存するには、いくつかの方法があります。 共通の方法は、タイプライブラリ(.TLB)ファイルにタイプ情報を生成することです。
Natural クラスの登録時に、クラスごとにタイプライブラリファイルが作成されます。
タイプライブラリは、$NATDIR/$NATVERS/etc/<serverid>/<classname>/<version> ディレクトリに生成され、レジストリのエントリ経由でクラスに接続されます。
タイプライブラリファイル名には、既存の名前と競合しない限り、クラスモジュール名が使用され、拡張子 ".tlb" が付きます。 クラスモジュール名には番号が付加されます。
Natural
クラスに定義された各インターフェイスは、クライアントではダイナミックインターフェイスとして参照されます("ディスパッチインターフェイス"
とも呼ばれます)。 インターフェイスの各メソッドは、クライアントでは METHOD
ステートメントに定義された名前で参照されます。
Natural クラスの最初のインターフェイスは、デフォルトのディスパッチインターフェイスとしてマークされます。
タイプ情報のサポートにより、複数のインターフェイスを同じメソッド名またはプロパティ名で定義することもできます。 Natural クライアントは、以下の例のように、インターフェイス名(Natural クラスに定義)をメソッド名の接頭語として使用して、対応するメソッドをアドレスします。
CREATE OBJECT #O3 OF CLASS "DepartmentList" SEND "Iterate.PositionTo" TO #O3 WITH "C" RETURN #DEPT
Natural クライアントは、タイプ情報を使用して、メソッドまたはプロパティが属しているインターフェイスを検出します。
注意:
Natural クライアントは、構文チェックの実行にカタログ時のタイプ情報を使用しません。
以下では次のトピックについて説明します。
クライアントからデータを受け取るため、または他のプログラミング言語で記述されたクラスにデータを渡すために、Natural
データフォーマットはいわゆる OLE オートメーション互換タイプに変換されます。 この表は、COM クライアントが Natural
クラスのメソッドパラメータまたはプロパティをどのように参照するかを示します。 例えば、Natural クラスにフォーマット A
のメソッドパラメータまたはプロパティがある場合は、これは COM クライアントによって VT_BSTR
として参照されます。
Natural データフォーマット | オートメーション互換タイプ |
---|---|
A | VT_BSTR |
B1 | VT_UI1 |
B2 | VT_UI2 |
B4 | VT_UI4 |
Bn (n != 1, 2, 4) | VT_UI1 の SAFEARRAY |
C | サポートされません |
D | VT_DATE |
F4 | VT_R4 |
F8 | VT_R8 |
I1 | VT_I2 |
I2 | VT_I2 |
I4 | VT_I4 |
GUI のハンドル | サポートされません |
HANDLE OF OBJECT | VT_DISPATCH |
L | VT_BOOL |
N15.4 | VT_CY |
Nn.m (n.m != 15.4) | VT_R8 |
P15.4 | VT_CY |
Pn.m (n.m != 15.4) | VT_R8 |
T | VT_DATE |
U | VT_BSTR |
指定された Natural データフォーマットの配列は、対応する "VT" タイプの
SAFEARRAY
にマップされます。
ただし、次のような特別な場合があります。
固定長でフォーマット
Bn(nは、1、2、4
以外、またはそのような変数の配列ではない)の変数は、VT_UI1
の 1 次元 SAFEARRAY
に
マップされます。 これは、ラージ変数およびダイナミック変数がまだサポートされていない、以前のバージョンの Natural との互換性のためです。
したがって、ラージバイナリ変数は固定長でタイプ B の変数の配列によってシミュレートする必要がありました。
フォーマット B のダイナミック変数は、VT_UI1
の 1 次元
SAFEARRAY
にマップされます。
フォーマット B のダイナミック変数の配列は、それぞれが VT_UI1
の 1 次元
SAFEARRAY
を含むバリアントの SAFEARRAY
にマップされます。
属性制御変数はマップされません。 それらは Natural 以外では意味がありません。 フォーマット HANDLE OF
GUI
の変数もマップされません。 対応するオートメーション互換タイプはありません。 したがって、属性制御変数または HANDLE
OF GUI
フォーマットのプロパティは、COM/DCOM を介してクライアントにアクセスされません。
これらのタイプのメソッドパラメータは、COM/DCOM
を介してメソッドを呼び出すときにクライアントがパラメータを省略できるように、パラメータデータエリアでオプションとしてマークする必要があります。
この表は、外部クラスのパラメータまたはプロパティを Natural でどのようにアドレスできるかを示します。 例えば、外部クラスにタイプ
VT_R4
のメソッドパラメータまたはプロパティがある場合は、このパラメータまたはプロパティは、F4 または F4 への
MOVE
互換性のあるフォーマットとして Natural でアドレスできます。
オートメーション互換タイプ | Natural データフォーマット |
---|---|
VT_BOOL |
L |
VT_BSTR |
A または U |
VT_CY |
P15.4 |
VT_DATE |
T |
VT_DISPATCH |
HANDLE OF OBJECT |
VT_UNKNOWN |
HANDLE OF OBJECT |
VT_I1 |
I1 |
VT_I2 |
I2 |
VT_I4 |
I4 |
VT_INT |
I4 |
VT_R4 |
F4 |
VT_R8 |
F8 |
VT_U1 |
B1 |
VT_U2 |
B2 |
VT_U4 |
B4 |
VT_UINT |
B4 |
最大 3 次元の SAFEARRAY
は、同じ次元数および対応するフォーマットの Natural
配列に変換されます。 3 次元を超える SAFEARRAY
は、Natural 内からは使用できません。
ただし、次のような特別な場合があります。
VT_BSTR
は、フォーマット A の Natural 変数、または固定長でフォーマット A の
Natural 変数の 1 次元配列にマップされます。 253 文字を超える文字列を保存するために、追加の次元が使用されます。
これは、ラージ変数およびダイナミック変数がまだサポートされていない、以前のバージョンの Natural との互換性のためです。
このマッピングは、これ以降は使用できません。 代わりに、フォーマット A のダイナミック変数を使用する必要があります。
VT_BSTR
の SAFEARRAY
は、同じ次元数でフォーマット A の
Natural 変数の配列、または 1 次元上で固定長でフォーマット A の Natural 変数の配列にマップします。 253
文字を超える文字列を保存するために、追加の次元が使用されます。 これは、ラージ変数およびダイナミック変数がまだサポートされていない、以前のバージョンの
Natural との互換性のためです。 このマッピングは、これ以降は使用できません。 代わりに、フォーマット A
のダイナミック変数の配列を使用する必要があります。
VT_UI1
の SAFEARRAY
は、全体のサイズが一致している固定長でフォーマット B の Natural 変数の配列にマップできます。
これは、ラージ変数およびダイナミック変数がまだサポートされていない、以前のバージョンの Natural との互換性のためです。
このマッピングは、これ以降は使用できません。 代わりに、フォーマット B のダイナミック変数を使用する必要があります。