CORBA::Object::_create_request()により、リクエストオブジェクトを作成します。リクエストオブジェクトに対して、サーバオブジェクトのオブジェクトリファレンス、NVListオブジェクトリファレンス、後述するNamedValueと呼ぶサーバの処理結果を格納する領域を指定します。結果として、リクエストオブジェクトのオブジェクトリファレンスが返されます。
ここで獲得したリクエストオブジェクトは、不要になった時点で削除する必要があります。オブジェクトの削除については、“8.3.8 リクエストの削除”を参照してください。
CORBA::NVList_ptr arg_tmp; // 復帰パラメタ用リストオブジェクトの生成 orb->create_list(1, arg_tmp, env); ODdemo::calculator::result *res = NULL; CORBA::Any any_tmp( _tc_ODdemo_calculator_result, res, CORBA_FALSE ); // 結果受け取り用変数(CORBA::NamedValue型変数) CORBA::NamedValue_ptr result = arg_tmp->add_value( NULL, // resultの設定 any_tmp, (CORBA::Flags)0, env); CORBA::Request_ptr request; // リクエストオブジェクトの生成 obj->_create_request( CORBA_OBJECT_NIL, // context "calculate", // メソッド名 arg_list, // 入力パラメタ result, // 復帰値 request, // 出力パラメタの格納域 CORBA::OUT_LIST_MEMORY, *env );
NamedValueは、サーバの処理結果を格納するための領域であり、以下のように定義されています。
IDLファイルでの定義を以下に示します。
module CORBA { struct NamedValue { identifier name; // パラメタの名前 any argument; // パラメタの値 long len; // パラメタの長さ Flags arg_modes; // パラメタの引き渡し方法(in,out,inout) }; };
C++言語でのNamedValueの定義を以下に示します。
class CORBA { class NamedValue { public: const char *name(CORBA::Environment &) const; // パラメタの名前 Any *value(CORBA::Environment &) const; // パラメタの値 Flags flags(CORBA::Environment &) const; // パラメタの引き渡し方法(in,out,inout) }; };