Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第4章 アプリケーションの開発(C言語)> 4.8 データ型に対するマッピング

4.8.10 動的インタフェースでのパラメタの獲得/解放

 動的起動インタフェー(DII)、または動的スケルトンインタフェース(DSI)を使用して動的にパラメタを作成する方法について説明します。
 パラメタはCORBA_NVList_add_item()で設定します。

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

inパラメタ

 サーバアプリケーションにinパラメタを渡す場合、クライアントアプリケーションでパラメタ領域を獲得し、そのポインタをCORBA_NVList_add_item()の第4パラメタに指定します。

  CORBA_NVList_add_item(
        arg_list, 
        name,                        /* IDLで指定したパラメタの名前を設定します。 */
        type,                        /* パラメタのTypeCodeを設定します。 */
        &param,                      /* パラメタ領域のポインタを設定します */
        sizeof( CORBA_long ),        /* パラメタのサイズを設定します */
        CORBA_ARG_IN,                /* CORBA_ARG_INを設定します */
        &env );

 獲得した領域は、使用しなくなった時点で解放します。

outパラメタ

 サーバアプリケーションの処理結果をoutパラメタで受け取る場合、 CORBA_NVList_add_item()は以下のように指定します。

  CORBA_NVList_add_item(
        arg_list, 
        name,                        /* IDLで指定したパラメタの名前を設定します。 */
        type,                        /* パラメタのTypeCodeを設定します。 */
        NULL,                        /* NULLを設定します */
        0,                           /* 0を設定します */
        CORBA_ARG_OUT,               /* CORBA_ARG_OUTを設定します */
        &env );

 サーバアプリケーションから渡されたデータの領域は、CORBA_NVList_free()で解放します。

inoutパラメタ

 サーバアプリケーションにinoutパラメタを渡す場合、クライアントアプリケーションでパラメタ領域を獲得し、そのポインタをCORBA_NVList_add_item()の第4パラメタに指定します。また、第6パラメタ(item_flag)にCORBA_IN_COPY_VALUEを指定します。

  CORBA_NVList_add_item(
        arg_list, 
        name,                        /* IDLで指定したパラメタの名前を設定します。 */
        type,                        /* パラメタのTypeCodeを設定します。 */
        &param,                      /* パラメタ領域のポインタを設定します */
        sizeof( CORBA_long ),        /* パラメタのサイズを設定します */
        CORBA_ARG_INOUT |            /* CORBA_ARG_INOUT | CORBA_IN_COPY_VALUEを設定します */
        CORBA_IN_COPY_VALUE,         
        &env );

 サーバアプリケーションから渡されたデータ領域は、CORBA_NVList_free()で解放します。

復帰パラメタ

 サーバアプリケーションの処理結果を復帰パラメタで受け取った後、パラメタ領域はCORBA_Request_delete()で解放します。

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

inパラメタ

 クライアントアプリケーションからinパラメタを受け取る場合、パラメタ領域の獲得/解放を行う必要はありません。CORBA_NVList_add_item()は以下のように指定します。

  CORBA_NVList_add_item(
        arg_list, 
        name,                /* IDLで指定したパラメタの名前を設定します。 */
        type,                /* パラメタのTypeCodeを設定します。 */
        NULL,                /* NULLを設定します */
        0,                   /* 0を設定します */
        CORBA_ARG_IN,        /* CORBA_ARG_INを設定します */
        &env );

outパラメタ

 サーバアプリケーションの処理結果をoutパラメタでクライアントアプリケーションに渡す場合、各データ領域獲得関数(CORBA_long_alloc()等)で領域を獲得し、そのポインタをCORBA_NVList_add_item()の第4パラメタに指定します。

  CORBA_NVList_add_item(
        arg_list, 
        name,                  /* IDLで指定したパラメタの名前を設定します。 */
        type,                  /* パラメタのTypeCodeを設定します。 */
        &param,                /* パラメタ領域へのポインタを設定します */
        sizeof( CORBA_long ),  /* パラメタのサイズを設定します */
        CORBA_ARG_OUT,         /* CORBA_ARG_OUTを設定します */
        &env );

 獲得した領域は、CORBAサービス内でリクエスト復帰後に解放されます。

inoutパラメタ

 クライアントアプリケーションからinoutパラメタを受け取る場合には、パラメタ領域の獲得/解放を行う必要はありません。CORBA_NVList_add_item()は以下のように指定します。

  CORBA_NVList_add_item(
        arg_list, 
        name,                  /* IDLで指定したパラメタの名前を設定します。 */
        type,                  /* パラメタのTypeCodeを設定します。 */
        NULL,                  /* NULLを設定します */
        0,                     /* 0を設定します */
        CORBA_ARG_INOUT,       /* CORBA_ARG_INOUTを設定します */
        &env );

 サーバアプリケーションの処理結果をinoutパラメタでクライアントアプリケーションに渡す場合は、以下のようにします。

 固定長データの場合
 CORBA_ServerRequest_params()で通知されたパラメタ領域に値を設定します。
 可変長データの場合
 CORBA_ServerRequest_params()で通知されたパラメタ領域を、CORBA_free()でいったん解放した後、データ域獲得関数(CORBA_string_alloc()等)により領域を獲得し、そのポインタを再設定します。受け渡すデータはその領域に設定します。

 inoutパラメタの領域は、リクエスト復帰後にスケルトンで解放されます。

復帰パラメタ

 サーバアプリケーションの処理結果を復帰パラメタ渡す場合、データ域獲得関数(CORBA_long_alloc()等)で領域を獲得します。


目次 索引 前ページ次ページ

Copyright 2006 FUJITSU LIMITED