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

8.3.5 パラメタの組立て

(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.5.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 );