Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第4章 アプリケーションの開発(C言語) | > 4.8 データ型に対するマッピング |
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 ); }
目次
索引
![]() ![]() |