Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第5章 アプリケーションの開発(C++言語) | > 5.2 データ型に対するマッピング |
IDL言語で配列を指定すると、C++言語でも配列にマッピングされます。また、配列スライス(配列の先頭の次元を減らしたもの。名前は"モジュール名::インタフェース名::配列名_slice")と配列スライスの領域獲得関数(関数名は"モジュール名::インタフェース名::配列名_alloc"。以降XX_alloc関数と呼ぶ)が生成されます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{ interface arraytest{ typedef long fix[4][3][2]; // 配列(固定長) typedef string str[2][3][4]; // 配列(可変長) fix op1(in fix para1, out fix para2, inout fix para3 ); str op2(in str para1, out str para2, inout str para3 ); }; };
typedef CORBA::Long fix[4][3][2]; // 配列(固定長) typedef CORBA::Long fix_slice[4][3]; // 配列スライス(固定長) typedef CORBA::String_var str[2][3][4]; // 配列(可変長) typedef CORBA::String_var str_slice[2][3]; // 配列スライス(可変長)
配列(固定長)のパラメタ(in、out、inout)を扱う場合、宣言した配列変数をパラメタに指定します。復帰パラメタは、スタブで領域獲得された配列スライスで返されます。この領域はアプリケーションで不要になった時点でデータ域解放関数(XX_free関数)で解放する必要があります。
以下にクライアントアプリケーションでの処理例を示します。
CORBA::Environment env; ODsample::arraytest_ptr obj; ODsample::arraytest::fix_slice *fix0; ODsample::arraytest::fix fix1, fix2, fix3; int i, j, k; for( i = 0; i < 4; i++ ) for( j = 0; j < 3; j++ ) for( k = 0; k < 2; k++ ) { fix1[i][j][k] = i; // inパラメタ fix3[i][j][k] = i*10; // inoutパラメタ } // サーバ呼出し fix0 = obj->op1( fix1, fix2, fix3, env ); // 領域解放 ODsample::arraytest::fix_free(fix0);
配列(可変長)のin、inoutパラメタを扱う場合、宣言した配列変数をパラメタで指定します。out、復帰パラメタはスタブで領域獲得された配列スライスで返されます。この領域はアプリケーションで不要になった時点でデータ域解放関数(XX_free関数)で解放する必要があります。
以下にクライアントアプリケーションの処理例を示します。
CORBA::Environment env; ODsample::arraytest_ptr obj; ODsample::arraytest::str_slice *str0, *str2; ODsample::arraytest::str str1, str3; int i, j, k; char buf[120]; for( i = 0; i < 2; i++ ) for( j = 0; j < 3; j++ ) for( k = 0; k < 4; k++ ) { sprintf( buf, "str1[%d][%d][%d]", i, j, k ); str1[i][j][k] = (const CORBA::Char *)buf; // inパラメタ設定 sprintf( buf, "str3[%d][%d][%d]", i, j, k ); str3[i][j][k] = (const CORBA::Char *)buf; // inoutパラメタ設定 } // サーバ呼出し str0 = obj->op2( str1, str2, str3, env ); // 領域解放 ODsample::arraytest::str_free( str0 ); ODsample::arraytest::str_free( str2 );
目次
索引
![]() ![]() |