(1)IDLマッピング
IDL言語で属性宣言(attribute)を定義すると、オブジェクトのデータ設定/取得を行う関数(関数名:IDLで定義された変数名)にマッピングされます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{
    interface       attrtest{
        attribute long  para1; 
        attribute string para2; 
        readonly attribute long para3; 
    };
};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 ); 
}