CORBAの初期化メソッドCORBA::ORB_init()を呼び出し、初期化処理を行います。結果として、ORBのオブジェクトリファレンスが返されます。このオブジェクトリファレンスは、以降で呼び出すORBインタフェースを使用する場合に指定します。
main( int argc, char *argv[] ) { CORBA::ORB_ptr orb; // ORBのオブジェクトリファレンス CORBA::Environment env; // 例外情報 int current_argc = argc; env = new CORBA::Environment; // 例外情報 orb = CORBA::ORB_init(current_argc, argv, FJ_OM_ORBid, env);
実行するオブジェクトをネーミングサービスから検索するために、ネーミングサービスのオブジェクトリファレンスが必要となります。CORBAインタフェースのオブジェクトリファレンスの取り出しメソッドCORBA::ORB::resolve_initial_references()によりネーミングサービスのオブジェクトリファレンスを取り出します。このとき、CORBA_ORB_ObjectId_NameServiceをメソッドのパラメタとして指定します。
// NamingServiceのオブジェクトリファレンスを獲得 CORBA::Object_ptr obj = orb->resolve_initial_references( CORBA_ORB_ObjectId_NameService, env ); // NamingContextクラスへの変換 CosNaming::NamingContext_ptr cos_naming = CosNaming::NamingContext::_narrow( obj );
ネーミングサービスのメソッドCosNaming::NamingContext::resolve()により、これから実行したいサーバアプリケーションのオブジェクトリファレンスを取り出します。検索したいオブジェクト名を当メソッドのパラメタとして指定します。
CosNaming::Name name; // CosNaming::Nameのインスタンス CORBA::Object_ptr obj; // サーバアプリケーションのオブジェクトリファレンス name.length(1); // オブジェクト名 name[0]->id = (const CORBA::Char *)"ODdemo::calculator"; // オブジェクトのタイプ name[0]->kind = (const CORBA::Char *)""; // サーバアプリケーションのオブジェクトリファレンスを獲得 obj = cos_naming-> resolve( name, env ); // ODdemo::calculatorクラスへの変換 ODdemo::calculator_ptr ap = ODdemo::calculator::_narrow( obj );
サーバプログラムのメソッドを呼び出します。メソッド名はIDLで指定したモジュール名、インタフェース名およびオペレーション名を2つのコロン(“::”)でつなげた形式で指定します。この例では、ODdemo, calculator, calculateがそれにあたります。なお、メソッド呼出し時にネーミングサービスで求めたサーバアプリケーションのオブジェクトリファレンスとサーバプログラムで例外が発生した場合に例外情報を獲得するためにCORBA::Environment構造体を指定します。
なお、アプリケーションで使用可能なCORBAのデータ型については“4.5 データ型に対するマッピング”を参照してください。
ODdemo::calculator::result res; // 復帰値 CORBA::Long a, b; // パラメタ a = 10; b = 5; // メソッドの呼出し res = ap->calculate( a, b, *env );