その他のデータ型については、CreateType関数またはCreateTypeById関数を使用して構造体等のデータ型のインスタンスを作成し、インスタンス内のメンバにアクセスするようにしなければなりません。なお、CreateType関数では、アクセスしたいデータ型の名前を指定しますが、CreateTypeById関数では、データ型のリポジトリIDを指定します。
(1) シーケンスがany型以外の基本データ型の場合
シーケンスが固定長の場合は、1次元の配列をIDLで指定した個数分、獲得します。
シーケンスがlong型で宣言された場合のVisual Basicでの使用例を以下に示します。
typedef sequence<long,10> vec10; // 10個のlong型
Dim vec10(10) As long // 10個のlong型を宣言 vec10(0) = 100 // 各メンバにデータを代入 vec10(1) = 101 // 各メンバにデータを代入 ... vec10(9) = 109 // 各メンバにデータを代入
(2) シーケンスが構造体、共用体、any型、オブジェクト、またはTypeCodeの場合
シーケンスが構造体、共用体、any型、オブジェクト、またはTypeCodeから構成される場合は、シーケンスのメンバをCreateType関数/CreateTypeById関数でオブジェクトのリファレンスを検索し、その結果をObject型の配列に格納します。
シーケンスがstruct型で宣言された場合のVisual Basicでの使用例を以下に示します。
typedef struct STR { // aとbを持つstruct
long a,b;
} Foo;
typedef sequence<Foo,10> FooSeq; // aとbを持つstruct10個のシーケンスDim FooSeq(10) As Object // 10個のObject型を宣言 FooSeq(0) = factory.CreateType( obj, "Foo" ) // データ型のリファレンスを10個分検索 FooSeq(1) = factory.CreateType( obj, "Foo" ) ...
構造体に値を設定するには、CreateType関数/CreateTypeById関数でオブジェクトのリファレンスを検索し、その結果をObject型変数に格納します。オブジェクトのプロパティに値を設定することにより、構造体のメンバに値を設定することができます。
構造体のVisual Basicでの使用例を以下に示します。
interface example5 {
typedef struct STR { // long型aとbを持つstruct
long a,b;
}Foo;
...
}; Dim str1 As Object // データ型structのリファレンス Set str1 = factory.CreateType(obj, "Foo") // データ型のリファレンスの検索 str1.a = 100 // aにデータを代入 str1.b = -50 // bにデータを代入
共用体に値を設定するには、CreateType関数/CreateTypeById関数でオブジェクトのリファレンスを検索し、その結果をObject型変数に格納します。オブジェクトのプロパティに設定することにより、共用体のメンバに値を設定することができます。プロパティのUNION_dは、データの種別を格納した弁別情報です。
共用体のVisual Basicでの使用例を以下に示します。
interface example6 {
typedef union UNI switch(long) { // long、float、charを持つ共用体
case 1 : long x;
case 2 : float y;
default: char z;
} Foo;
short set(in Foo udata); // 共用体のパラメタを持つset関数、
// 復帰値short型
...
} ; Dim uni1 As Object // データ型のリファレンス
Dim discriminator As Variant // 弁別情報格納変数
Dim ret As Integer // 復帰値格納変数
Dim ans As Variant // 共用体データ格納変数
Set uni1 = factory.CreateType(obj, "Foo") // データ型のリファレンスの検索
uni1.x = 100 // 共用体にデータを代入
ret = obj.set(uni1) // set関数の呼び出し
discriminator = uni1.UNION_d // 弁別情報の格納
Select Case discriminator // 弁別情報によるデータの判定
Case 1 // long型の処理
ans = uni1.x
Case 2
ans = uni1.y
Case Else // char型の処理
ans = uni1.z配列は、Visual Basicの配列を使用します。ただし、配列が構造体、共用体、any型、オブジェクト、TypeCodeの場合は、CreateType関数/CreateTypeById関数でインスタンスを作成し、その結果をObject型変数に格納します。
配列のVisual Basicでの使用例を以下に示します。
typedef long a[4][5];
interface example8 {
typedef struct STR {
long a,b;
} Foo;
typedef Foo FooArr[3][4];
...
} ; Dim a(4,3) As long
Dim FooArr(3,2) As Object
Dim factory As Object
Dim obj As Object
a(0,0) = 100
a(1,0) = 101
...
a(4,3) = 119
Set factory = CreateObject("CORBA.Factory")
Set obj = factory.GetObject("example8")
FooArr(0,0) = factory.CreateType(obj, "Foo")
FooArr(1,0) = factory.CreateType(obj, "Foo")
...