Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第5章 アプリケーションの開発(C++言語)> 5.5 データ型に対するマッピング

5.5.10 属性宣言(attribute)のマッピング

(1)IDLマッピング

 IDL言語で属性宣言(attribute)を定義すると、オブジェクトのデータ設定/取得を行う関数(関数名はIDLで定義された変数名)にマッピングされます。
 以降では、以下のIDL定義例をもとに説明します。

IDL言語

  module ODsample{
      interface       attrtest{
          attribute long  para1; 
          attribute string para2; 
          readonly attribute long para3; 
      };
  };

C++言語

  CORBA::Long   para1;
  av->para1(100,*env);            // データ設定関数
  para1 = av->para1(*env);        // データ取得関数

  CORBA::Char*  p; 
  p = CORBA::string_alloc(7); 
  av->para2( p,*env );            // データ設定関数
  p = av->para2( *env );          // データ取得関数

  CORBA::Long   para3;
  para3 = av->para3(*env);        // データ取得関数

(2)クライアントアプリケーションで扱うパラメタ

 データ設定関数でデータ設定に使用するデータ域はinパラメタと同様に扱われます。また、データ取得関数でデータ取得に使用するデータ域は復帰パラメタと同様に扱われます。このため、可変長データでは、その領域が不要になった時点で領域を解放する必要があります。

  ODsample::attrtest_var  av
  env = new CORBA::Environment;

  CORBA::Long   para1; 
  para1 = av->para1(*env); 
  av->para1(100, *env); 
  para1 = av->para1(*env); 
  cout << para1 << endl; 

  CORBA::Char*  p; 
  p = CORBA::string_alloc(7); 
  strcpy( p, "STRING" ); 
  av->para2( p,*env ); 
  CORBA::string_free( p ); 

  p = av->para2( *env ); 
  cout << p << endl; 
  CORBA::string_free( p ); 

  para3 = av->para3(*env); 
  cout << para3 << endl;

(3)サーバアプリケーションで扱うパラメタ

 データ設定関数でデータ設定に使用するデータ域はinパラメタと同様に扱われ、スケルトンで自動的に獲得/解放されます。データ取得関数でデータ取得に使用するデータ域は、復帰パラメタと同様に扱われます。このため、可変長データでは、データ域獲得関数で領域獲得する必要があります。獲得した領域はスケルトンで自動的に解放されます。

  CORBA::Long
  ODsample_attrtest_impl::para1(      // データ取得関数
      CORBA::Environment      & )
      throw( CORBA::Exception ) 
  {
      CORBA::Long   para1; 
      return( para1 ); 
  }

  void
  ODsample_attrtest_impl::para1(      // データ設定関数
        CORBA::Long             data, 
        CORBA::Environment      & ) 
        throw( CORBA::Exception ) 
  {
        CORBA::Long   para1; 
         para1 = data; 
  }

  CORBA::Char*
  ODsample_attrtest_impl::para2(      // データ取得関数
        CORBA::Environment      & ) 
        throw( CORBA::Exception ) 
  {
        static CORBA::Char* p; 
        p = "test"; 
        return( p ); 
  }

  void
  ODsample_attrtest_impl::para2(      // データ設定関数
        const CORBA::Char* data, 
        CORBA::Environment      & ) 
        throw( CORBA::Exception ) 
  {
        CORBA::String_var  para2("");
        para2 = data; 
        return; 
  }

  CORBA::Long
  ODsample_attrtest_impl::para3(      // データ取得関数
        CORBA::Environment      & ) 
        throw( CORBA::Exception ) 
  {
        CORBA::Long        para3; 
        return( para3 ); 
  }

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005