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()等)で領域を獲得します。
目次
索引
![]() ![]() |