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

4.6.2 文字列型

(1)IDLマッピング

IDL言語で文字列型stringを指定した場合、C++言語ではCORBA::Char *にマッピングされます。
以降では、以下のIDL定義例をもとに説明します。


IDL言語
module ODsample{
    interface  stringtest{
        string op1(in string str1, out string str2, inout string str3); 
    };
};

C++言語
CORBA::Char *
ODsample::stringtest::op1(
    const CORBA::Char *str1,      // inパラメタ
    CORBA::Char  *&str2,          // outパラメタ
    CORBA::Char  *&str3,          // inoutパラメタ
    CORBA::Environment  &env )    // 例外情報

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

クライアントアプリケーションのパラメタの扱いについて、以下に示します。

パラメタ

サーバへ渡すパラメタ

サーバから渡されたパラメタ

in

CORBA::string_alloc()で領域を獲得します。

inout

(inパラメタと同じ)

領域は、スタブで自動的に獲得されます。

out
復帰

(inoutパラメタと同じ)

注意

クライアントおよびスタブで獲得した領域は、不要になった時点でCORBA::string_free()で解放する必要があります。

クライアントアプリケーションでの処理例を以下に示します。

CORBA::Environment  env; 
CORBA::Char         *str1, *str2, *str3, *ret; 

// inパラメタ
str1 = CORBA::string_alloc(2);          // 領域獲得
strcpy( str1 ,"IN" );                   // パラメタ設定

// inoutパラメタ
str3 = CORBA::string_alloc(7);          // 領域獲得
strcpy( str3 ,"INOUT:1" );              // パラメタ設定

// サーバ呼出し
ret = obj->op1( str1, str2, str3, env );

// 領域解放
CORBA::string_free( ret );              // 復帰パラメタ
CORBA::string_free( str1 );             // inパラメタ
CORBA::string_free( str2 );             // outパラメタ
CORBA::string_free( str3 );             // inoutパラメタ

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

サーバアプリケーションのパラメタの扱いについて以下に示します。

パラメタ

クライアントから渡されたパラメタ

クライアントへ渡すパラメタ

in

領域は、スケルトンで自動的に獲得/解放されます。

inout

領域は、スケルトンで自動的に獲得されます。

  • 渡されたパラメタより短い文字列を返す場合:
    渡された領域に文字列を設定します。

  • 渡されたパラメタより長い文字列を返す場合:
    渡された領域をCORBA::string_free()で解放し、CORBA::string_alloc()で新しい領域を獲得します。

渡した領域は、スケルトンで自動的に解放されます。

out
復帰

領域は、CORBA::string_alloc()で獲得します。
この領域は、スケルトンで自動的に解放されます


サーバアプリケーションでの処理例を以下に示します。

CORBA::Char *
ODsample_stringtest_impl::op1(
    const CORBA::Char  *str1,          // inパラメタ
    CORBA::Char        *&str2,         // outパラメタ
    CORBA::Char        *&str3,         // inoutパラメタ
    CORBA::Environment &env )          // 例外情報
    throws( CORBA::Exception ) 
{
    // outパラメタ
    str2 = CORBA::string_alloc(3);     // 領域獲得
    strcpy( str2, "OUT" );             // パラメタ設定

    // inoutパラメタ
    CORBA::string_free( str3 );        // 領域解放
    str3 = CORBA::string_alloc(7);     // 領域再獲得
    strcpy( str3, "INOUT:2" );         // パラメタ設定

    // 復帰パラメタ
    str = CORBA::string_alloc(6);      // 領域獲得
    strcpy( str, "RETURN" );           // パラメタ設定
    return( str ); 
}