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

G.1.4 基本データ型の指定方法

以下にCORBAとVisual Basicで提供しているデータ型と、Visual Basicでの指定方法を示します。

CORBAデータ型

Visual Basicでの指定方法

基本データ型

整数型

long

Long

short

Integer

unsigned long

Long

unsigned short

Long

浮動小数点型

float

Single

double

Double

文字型

char

Integer

オクテッド型

octet

Integer

ブーリアン型

boolean

Integer

文字列型

string

G.1.4.1 文字列型”参照

列挙型

enum

G.1.4.2 列挙型”参照

any型

any

G.1.4.3 any型”参照

シーケンス型

sequence

G.1.5.1 シーケンス型”参照

構造体

struct

G.1.5.2 構造体”参照

共用体

union

G.1.5.3 共用体”参照

配列

array

G.1.5.4 配列”参照


注意

データ型の注意事項
  • unsigned shortを持つサーバアプリケーションを呼び出す場合、unsigned shortの範囲で指定します。マイナス値や65536以上の値は、指定できません。

  • unsigned longを持つサーバアプリケーションを呼び出す場合、マイナス値は指定できません。

  • charやoctetを持つサーバアプリケーションを呼び出す場合、charの範囲で指定します。マイナス値や256以上の値は、指定できません。

  • booleanを持つサーバアプリケーションを呼び出す場合、0と1以外の値は指定できません。

  • any型を持つサーバアプリケーションを呼び出す場合、変数をObject型で宣言し、データ型のインスタンスをCreateType関数/CreateTypeById関数で作成し、valueやtypeはインスタンスのプロパティとして扱います。

  • objref型/TypeCode型/配列型をパラメタとする場合、およびany型/シーケンス型/構造体/共用体のメンバにstring, objref, struct, union, sequence, arrayを持つ場合は、十分なメモリを確保する必要があります。


Visual Basicでのアプリケーション作成時の注意事項

(1) メモリの解放方法

Visual Basicでのオブジェクトおよびout/inoutパラメタで使用した領域の解放方法を以下に示します。

  • CORBAのオブジェクト(CreateTypeしたデータも含む)は、以下のように解放します。

    Set Ap = Nothing

    Ap:解放したいオブジェクト

  • 配列の宣言は固定数ではなく可変(動的)で宣言し、Erase文で解放します。

  • 文字列は、NULL文字を設定することで解放します。

    str = ""

(2) 配列(sequence型含む)のパラメタの受渡し

配列(sequence型含む)をパラメタとして受け渡す場合、以下の手順で行います。配列宣言でVisual Basic表現とIDL宣言で要素並びに差異があります。

Visual Basic  Dim a(2,3) As Long
IDL定義       long a(4,3)
  • inoutで要素数が変更される場合は、動的宣言を行い、クライアントで以下のように再配置してデータを送付します。

    ReDim abc(n1,n2,n3) As Long
  • サーバから結果を受け取った際、データの取り出し前にReDim Preserve abc(m1,m2m3) As Longを発行し、内容を保持した状態で型変換を行い、データにアクセスします。

なお、inパラメタに指定した領域で、値が未設定域である場合は、0が渡されます。


G.1.4.1 文字列型

固定長、可変長の文字列は、それぞれ、長さ指定のあるStringと、長さ指定のないStringを使用します。なお、固定長の文字列を使用する場合は、IDL定義に“使用する文字数+1”の値を指定する必要があります。
文字列のVisual Basicでの使用例を以下に示します。


IDL言語
typedef string<11>    sten;    // 固定長(10文字)のString
typedef string        sinf;    // 可変長のString

Visual Basic
Dim sten As String * 11        // 固定長(10文字)のString
Dim sinf As String             // 可変長のString

G.1.4.2 列挙型

列挙型はそれぞれの要素を定数として宣言します。

列挙型のVisual Basicでの使用例を以下に示します。


IDL言語
typedef enum EM {red,green,blue}Foo;

Visual Basic
Global Const red   = 0    // 各要素を定数として宣言 
Global Const green = 1    // 各要素を定数として宣言
Global Const blue  = 2    // 各要素を定数として宣言

G.1.4.3 any型

any型を持つサーバアプリケーションを呼び出す場合は、変数をObject型で宣言し、データ型のオブジェクトリファレンスをCreateType関数/CreateTypeById関数で検索し、value/typeはそのオブジェクトのプロパティとして扱います。any型データのTypeCodeプロパティに値を設定する場合は、サーバにTypeCodeを返すオペレーションを用意し、返された値を設定します。valueプロパティには、データ型に応じた方法で値を設定します。


(1) any型データにデータを設定する場合

any型データのVisual Basicで設定する使用例を以下に示します。


IDL言語
module mod {
    typedef  any  typeany;     // any型
    interface intf {
        TypeCode GetTypeCode();// TypeCodeプロパティに設定するTypeCodeを返す関数
        any op( in any a );    // any型のパラメタを持つop関数
                               // any型の復帰値
    };
};

Visual Basic
Dim factory As Object                           // OLE-CORBAゲートウェイのインスタンス
Dim obj As Object                               // サーバのオブジェクトリファレンス
Set factory = CreateObject("CORBA.Factory")     // OLE-CORBAゲートウェイの起動
Set obj = factory.GetObject("example")          // オブジェクトの検索

Dim anydata As Object                           // データ型のリファレンス(パラメタ受渡し用) 
Dim anydata1 As Object                          // データ型のリファレンス(復帰値用) 
Dim obj3 As Object                              // データ型のリファレンス(TypeCode用) 

Set anydata =factory.CreateType(obj, "typeany") // データ型のリファレンスの検索
Set obj3= obj.GetTypeCode()                     // TypeCodeオブジェクトの獲得
anydata.TypeCode = obj3                         // TypeCodeの設定
anydata.Value = &H80000000                      // データの設定

anydata1 =obj.op(anydata)                       // op関数の呼び出し

(2) any型データからデータを取り出す場合

any型データから値を取り出す場合は、any型データのTypeCodeメンバに対してkind関数を呼び出し、データの型を取り出します。取り出したデータ型に対する値をvalueメンバから取り出します。

any型データのVisual Basicでの使用例を以下に示します。


Visual Basic
anydata = obj.op(anydata)              // op関数の呼び出し

kind = anydata.TypeCode.kind           // TypeCodeの取り出し
Select Case kind
Case 2         ‘short                  // データ型がshortの処理
s = anydata.Value
Case 15        ‘struct                 // データ型がstructの処理
l = anydata.Value.d1
str = anydata.Value.d2
Case 16 ‘union                         // データ型がunionの処理
dic = anydata.Value.UNION_d
    Select Case dic
    Case 1
        l = anydata.Value.d1
    Case 2
        str = anydata.Value.d2
    End Select
End Select