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

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

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

(1)IDLマッピング

 IDL言語で属性宣言(attribute)を指定すると、オブジェクトのデータ設定/取得を行う関数(関数名は"モジュール名_インタフェース名_set(get)_変数名"。以降、データ設定関数/データ設定関数と呼ぶ)が生成されます。
 以降では、以下のIDL定義例をもとに説明します。

IDL言語

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

C言語

  ODsample_attrtest_set_para1( obj, 2, &env ); 
  ODsample_attrtest_get_para1( obj, &env ); 

  ODsample_attrtest_set_para2( obj, "test", &env ); 
  ODsample_attrtest_get_para2( obj, &env ); 

  ODsample_attrtest_get_para3( obj, &env );

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

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

      CORBA_Object         obj; 
      CORBA_Environment    env; 
      CORBA_long           ret; 
      CORBA_string         str; 

  /* para1: データ設定関数 */
      ODsample_attrtest_set_para1( obj, 2, &env ); 

  /* para1: データ取得関数 */
      ret = ODsample_attrtest_get_para1( obj, &env ); 
      printf( "ODsample_attrtest_get_para1 returns [%d]\n", ret ); 

  /* para2: データ設定関数 */
      ODsample_attrtest_set_para2( obj, "test", &env ); 

  /* para2: データ取得関数 */
      str = ODsample_attrtest_get_para2( obj, &env ); 
      env_check( "ODsample_attrtest_get_para2" ); 
      printf( "ODsample_attrtest_get_para2 returns [%s]\n", str ); 
      CORBA_free( str );                  /* 領域解放 */

  /* para3: データ取得関数 */
      ret = ODsample_attrtest_get_para3( obj, &env ); 
      printf( "ODsample_attrtest_get_para3 returns [%d]\n", ret );

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

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

  /* para1: データ設定関数 */
  void
  ODsample_attrtest_set_para1( 
        ODsample_attrtest   obj, 
        CORBA_long          para, 
        CORBA_Environment   *env ) 
  {
        para1 = para; 
  }

  /* para1: データ取得関数 */
  CORBA_long
  ODsample_attrtest_get_para1( 
        ODsample_attrtest   obj, 
        CORBA_Environment   *env ) 
  {
        return para1 ;
  }

  /* para2: データ設定関数 */
  void
  ODsample_attrtest_set_para2( 
        ODsample_attrtest   obj, 
        CORBA_string        para, 
        CORBA_Environment   *env ) 
  {
        CORBA_free( para2 ); 
        para2 = CORBA_string_alloc( strlen( para ) ); 
        strcpy( para2, para ); 
        return; 
  }

  /* para2: データ取得関数 */
  CORBA_string
  ODsample_attrtest_get_para2( 
        ODsample_attrtest   obj, 
        CORBA_Environment   *env ) 
  {
        CORBA_string    ret; 

        if( para2 == NULL ) {
                ret = CORBA_string_alloc(1); 
                ret[0] = '\0'; 
                return( ret ); 
        }
        else {
                ret = CORBA_string_alloc( strlen(para2)+1 ); 
                strcpy( ret, para2 ); 
                return( ret ); 
        }
  }

  /* para3: データ取得関数 */
  CORBA_long
  ODsample_attrtest_get_para3( 
        ODsample_attrtest   obj, 
        CORBA_Environment   *env ) 
  {
        return( para3 ); 
  }

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

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