| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第1部 アプリケーション開発(基本編) | > 第3章 アプリケーションの開発(C言語) | > 3.7 データ型に対するマッピング |
IDL言語で属性宣言(attribute)を指定すると、オブジェクトのデータ設定/取得を行う関数(関数名は“モジュール名_インタフェース名_set(get)_変数名”。以降、データ設定関数/データ設定関数と呼ぶ)が生成されます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{
interface attrtest{
attribute long para1;
attribute string para2;
readonly attribute long para3;
};
};
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 );
データ設定関数でデータ設定に使用するデータ域は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 );
データ設定関数でデータ設定に使用するデータ域は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 );
}
目次
索引
![]()
|