| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第5章 アプリケーションの開発(C++言語) | > 5.5 データ型に対するマッピング |
動的起動インタフェース(DII)または動的スケルトンインタフェース(DSI)を使用して動的にパラメタを作成する方法について説明します。
パラメタはCORBA::NVList::add_value()を使用して設定します。
サーバアプリケーションにinパラメタを渡す場合、クライアントアプリケーションでパラメタ領域を獲得し、add_value()の第2パラメタ(Any型)に指定します。
CORBA::NVList_ptr arg_list;
CORBA::Any p1;
CORBA::Long x = 100;
p1 <<= x;
arg_list->add_value(
name, /* IDLで指定したパラメタの名前を設定します */
p1, /* inで使用する値を設定したAny型を設定します */
CORBA::ARG_IN, /* CORBA::ARG_INを設定します */
*env );
動的に獲得した領域は、リクエスト発行後、使用しなくなった時点で解放してください。
サーバアプリケーションの処理結果をoutパラメタで受け取る場合、add_value()は以下のように指定します。
CORBA::Any p2;
CORBA::Long y = 0;
p2 <<= y;
arg_list->add_value(
name, /* IDLで指定したパラメタの名前を設定します */
p2, /* outの値を設定するAny型を設定します */
CORBA::ARG_OUT, /* CORBA::ARG_OUTを設定します */
*env );
サーバアプリケーションから渡されたデータ用に獲得された領域は、NVListクラスの領域を廃棄する際に自動的に解放されます。
サーバアプリケーションにinoutパラメタを渡す場合、クライアントアプリケーションでパラメタ領域を獲得し、add_value()の第2パラメタ(Any型)に指定します。また、第3パラメタ(item_flag)にCORBA::IN_COPY_VALUEを指定します。
CORBA::Any p3;
CORBA::Long z = 200;
p3 <<= z;
arg_list->add_value(
name, /* IDLで指定したパラメタの名前を設定します */
p3, /* inoutの値を設定するAny型を設定します */
CORBA::ARG_INOUT | /* CORBA::ARG_INOUT | CORBA::IN_COPY_VALUEを設定します */
CORBA::IN_COPY_VALUE,
*env );
サーバアプリケーションから渡されたデータ用に獲得された領域は、NVListクラスの領域を廃棄する際に自動的に解放されます。
サーバアプリケーションの処理結果を復帰パラメタで受け取った後、パラメタ領域はCORBA::release()で解放します。
クライアントアプリケーションからinパラメタを受け取る場合、パラメタ領域の獲得/解放を行う必要はありません。add_value()は以下のように指定します。
CORBA::Any p1( ((*params)[0])->type, &i, CORBA_TRUE );
arg_list->add_value(
name, /* IDLで指定したパラメタの名前を設定します */
p1, /* inで使用する値を設定したAny型を設定します */
CORBA::ARG_IN, /* CORBA::ARG_INを設定します */
*env );
サーバアプリケーションの処理結果をoutパラメタで渡す場合、データ域獲得関数(CORBA::long_alloc()等)で領域を獲得し、そのポインタをadd_value()の第2パラメタに指定します。
CORBA::Any *p2 = new CORBA::Any( ((*params)[1])->type, &i, CORBA_TRUE );
arg_list->add_value(
name, /* IDLで指定したパラメタの名前を設定します */
*p2, /* outの値を設定するAny型を設定します */
CORBA::ARG_OUT, /* CORBA::ARG_OUTを設定します */
*env );
獲得した領域は、CORBAサービス内でリクエスト復帰後に解放されます。
クライアントアプリケーションからinoutパラメタを受け取る場合、パラメタ領域の獲得/解放を行う必要はありません。add_value()は以下のように指定します。
CORBA::Any *p3 = new CORBA::Any(( (*params)[2])->type, &i, CORBA_TRUE );
arg_list->add_value(
name, /* IDLで指定したパラメタの名前を設定します */
*p3, /* inoutの値を設定するAny型を設定します */
CORBA::ARG_INOUT, /* CORBA::ARG_INOUTを設定します */
*env );
サーバアプリケーションの処理結果をinoutでクライアントアプリケーションに渡す場合、以下のようにします。
inoutパラメタとして使用した領域は、リクエスト復帰後にスケルトンで解放されます。
サーバアプリケーションの処理結果を復帰パラメタ渡す場合、データ域獲得関数(CORBA::long_alloc()等)で領域を獲得します。
目次
索引
![]()
|