(1)パラメタリストの生成
CORBA::ORB::create_list()により、サーバアプリケーションに渡すパラメタを格納するための領域を保持するリストオブジェクト(NVListオブジェクト)を生成します。このとき、何個のパラメタを格納するかを指定します。結果として、リストオブジェクトのオブジェクトリファレンスが返されます。NVListオブジェクトの詳細については、“12.2 NVListオブジェクト”を参照してください。
CORBA::Any tmp_any = *description->value; // Contained_Description構造体から // パラメタ情報構造体の抽出 CORBA::OperationDescription *opr_description = (CORBA::OperationDescription *)tmp_any.value(); // パラメタ情報の抽出 CORBA::ParDescriptionSeq *params = &opr_description->parameters; CORBA::NVList *arg_list; // NVList orb->create_list( params->length(), arg_list, env ); // リストオブジェクトの生成
(2)パラメタリストの設定
CORBA::NVList::add_value()により、サーバアプリケーションに渡すパラメタをリストオブジェクトに設定します。パラメタとして、CORBA::NVListオブジェクトリファレンス、サーバアプリケーションのパラメタの名前、型、値、および長さを設定します。
add_value()によりパラメタ情報をリストオブジェクトに設定する順番は、IDL定義に従う必要があります。IDL定義において、メソッドの第1引数がinパラメタ、第2引数がoutパラメタ、第3引数がinoutパラメタの場合、inパラメタ、outパラメタ、inoutパラメタの順番でリストオブジェクトに設定する必要があります。
パラメタの設定方法の詳細については、“データ型に対するマッピング”の“8.3.9 動的インタフェースでのパラメタの獲得/解放”を参照してください。また、any型の詳細については、“データ型に対するマッピング”の “4.6.4 any型”を参照してください。
CORBA::Any p1, p2; CORBA::Long x = 10, y = 20; p1 <<= x; p2 <<= y; // パラメタの設定 arg_list->add_value( ((*params)[0])->name, // パラメタ名 p1, // パラメタの型および値 CORBA::ARG_IN, // パラメタのタイプ(in,out, inout) env ); // パラメタの設定 arg_list->add_value( ((*params)[1])->name, // パラメタ名 p2, // パラメタの型および値 CORBA::ARG_IN, // パラメタのタイプ(in,out, inout) env );