ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)

G.1.5 その他のデータ型の指定方法

  その他のデータ型については、CreateType関数またはCreateTypeById関数を使用して構造体等のデータ型のインスタンスを作成し、インスタンス内のメンバにアクセスするようにしなければなりません。なお、CreateType関数では、アクセスしたいデータ型の名前を指定しますが、CreateTypeById関数では、データ型のリポジトリIDを指定します。


G.1.5.1 シーケンス型

  シーケンスは1次元の配列として扱います。なお、データ型により、定義が異なります。


(1) シーケンスがany型以外の基本データ型の場合

  シーケンスが固定長の場合は、1次元の配列をIDLで指定した個数分、獲得します。シーケンスがlong型で宣言された場合のVisual Basicでの使用例を以下に示します。

IDL言語
  typedef sequence<long,10> vec10;       // 10個のlong型
Visual Basic
  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での使用例を以下に示します。

IDL言語
  typedef struct STR {                         // aとbを持つstruct
      long a,b; 
  } Foo; 
  typedef sequence<Foo,10> FooSeq;             // aとbを持つstruct10個のシーケンス
Visual Basic
  Dim FooSeq(10) As Object                     // 10個のObject型を宣言

  FooSeq(0) = factory.CreateType( obj, "Foo" ) // データ型のリファレンスを10個分検索
  FooSeq(1) = factory.CreateType( obj, "Foo" ) 
  ... 

G.1.5.2 構造体

  構造体に値を設定するには、CreateType関数またはCreateTypeById関数でオブジェクトのリファレンスを検索し、その結果をObject型変数に格納します。オブジェクトのプロパティに値を設定することにより、構造体のメンバに値を設定することができます。構造体のVisual Basicでの使用例を以下に示します。

IDL言語
  interface example5 {
     typedef struct STR {        // long型aとbを持つstruct
         long a,b; 
     }Foo; 
     ... 
  }; 
Visual Basic
  Dim str1 As Object                         // データ型structのリファレンス

  Set str1 = factory.CreateType(obj, "Foo")  // データ型のリファレンスの検索
  str1.a = 100                               // aにデータを代入
  str1.b = -50                               // bにデータを代入

G.1.5.3 共用体

  共用体に値を設定するには、CreateType関数またはCreateTypeById関数でオブジェクトのリファレンスを検索し、その結果をObject型変数に格納します。オブジェクトのプロパティに設定することにより、共用体のメンバに値を設定することができます。プロパティのUNION_dは、データの種別を格納した弁別情報です。共用体のVisual Basicでの使用例を以下に示します。

IDL言語
  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型
     ... 
  } ; 
Visual Basic
  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

G.1.5.4 配列

  配列は、Visual Basicの配列を使用します。ただし、配列が構造体、共用体、any型、オブジェクト、TypeCodeの場合には、CreateType関数またはCreateTypeById関数でインスタンスを作成し、その結果をObject型変数に格納します。配列のVisual Basicでの使用例を以下に示します。

IDL言語
  typedef long a[4][5]; 
  interface example8 {
     typedef struct STR {
         long a,b; 
     } Foo; 
     typedef Foo FooArr[3][4]; 
     ... 
  } ; 
Visual Basic
  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")
  ...