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

4.6.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 ); 
}