配列を使用する際、固定長データの場合と可変長データの場合でデータの扱い方が異なります。
■固定長データ
配列(固定長)を扱う場合のサーバアプリケーションについて以下に示します。
なお、固定長の配列とは、メンバに以下のデータを含まない配列です。
文字列型
構造体
配列
typedef long server_array_fix[5][3]; module apfwmod { interface apfwinf { server_array_fix server_apl( in server_array_fix param_in, /* INパラメタ */ out server_array_fix param_out, /* OUTパラメタ */ inout server_array_fix param_inout /* INOUTパラメタ */ ); }; }; |
typedef int server_array_fix[5][3]; server_array_fix* server_apl( server_array_fix *param_in, /* INパラメタ */ server_array_fix **param_out, /* OUTパラメタ */ server_array_fix **param_inout, /* INOUTパラメタ */ int *rtn, /* 処理結果情報 */ apfwExcept *apfw_env ); /* 例外情報 */ |
パラメタ | アプリケーション連携実行基盤から | アプリケーション連携実行基盤へ |
---|---|---|
IN |
| - |
| ||
OUT | NULLポインタを値として持つ変数のアドレスが渡されます。 |
|
| ||
INOUT |
|
|
|
| |
復帰 | - |
|
|
#include "apfwcom.h" #include "apfw_cdr_lib.h" #include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */ server_array_fix* server_apl( server_array_fix *param_in, /* INパラメタ */ server_array_fix **param_out, /* OUTパラメタ */ server_array_fix **param_inout, /* INOUTパラメタ */ int *rtn, /* 処理結果情報 */ apfwExcept *apfw_env ) /* 例外情報 */ { server_array_fix *apfw_result = NULL; /* アプリケーションの復帰値 */ server_array_fix work_param_out; server_array_fix work_param_inout; server_array_fix work_ret; int i,j; /* OUTパラメタ */ *param_out = apfw_c_alloc(sizeof(server_array_fix)); if( *param_out == NULL ){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } for(i=0;i<5;i++){ for(j=0;j<3;j++){ work_param_out[i][j] = i+j; } } memcpy(*param_out,work_param_out,sizeof(server_array_fix)); /* INOUTパラメタ */ if( *param_inout == NULL ){ *param_inout = apfw_c_alloc(sizeof(server_array_fix)); if( *param_inout == NULL ){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } } for(i=0;i<5;i++){ for(j=0;j<3;j++){ work_param_inout[i][j] = i+j; } } memcpy(*param_inout,work_param_inout,sizeof(server_array_fix)); /* 復帰情報 */ apfw_result = apfw_c_alloc(sizeof(server_array_fix)); if( apfw_result == NULL ){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } for(i=0;i<5;i++){ for(j=0;j<3;j++){ work_ret[i][j] = i+j; } } memcpy(apfw_result,work_ret,sizeof(server_array_fix)); *rtn = APFW_RTN_COMMIT; /* 処理結果情報に正常(APFW_RTN_COMMIT)を設定 */ return( apfw_result ); } |
■可変長データ
配列(可変長)を扱う場合のサーバアプリケーション例を以下に示します。
なお、可変長の配列とは、メンバに以下のデータを含む配列です。
文字列型
構造体
配列
typedef string server_array_var[2]; module apfwmod { interface apfwinf { server_array_var server_apl( in server_array_var param_in, /* INパラメタ */ out server_array_var param_out, /* OUTパラメタ */ inout server_array_var param_inout /* INOUTパラメタ */ ); }; }; |
typedef char *server_array_var[2]; server_array_var* server_apl( server_array_var *param_in, /* INパラメタ */ server_array_var **param_out, /* OUTパラメタ */ server_array_var **param_inout, /* INOUTパラメタ */ int *rtn, /* 処理結果情報 */ apfwExcept *apfw_env ); /* 例外情報 */ |
パラメタ | アプリケーション連携実行基盤から | アプリケーション連携実行基盤へ |
---|---|---|
IN |
| - |
| ||
OUT | NULLポインタを値として持つ変数のアドレスが渡されます。 |
|
| ||
INOUT |
|
|
|
| |
復帰 | - |
|
|
#include "apfwcom.h" #include "apfw_cdr_lib.h" #include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */ server_array_var* server_apl( server_array_var *param_in, /* INパラメタ */ server_array_var **param_out, /* OUTパラメタ */ server_array_var **param_inout, /* INOUTパラメタ */ int *rtn, /* 処理結果情報 */ apfwExcept *apfw_env ) /* 例外情報 */ { server_array_var *apfw_result = NULL; /* アプリケーションの復帰値 */ server_array_var work_param_out; server_array_var work_param_inout; server_array_var work_ret; int i; /* OUTパラメタ */ *param_out = apfw_c_alloc(sizeof(server_array_var)); if( *param_out == NULL){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } for(i=0;i<2;i++){ work_param_out[i] = apfw_c_alloc(10); if( work_param_out[i] == NULL ){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } strcpy( work_param_out[i], "OUT DATA" ); } memcpy(*param_out,work_param_out,sizeof(server_array_var)); /* INOUTパラメタ */ if( *param_inout != NULL ){ memcpy(work_param_inout,*param_inout,sizeof(server_array_var)); for(i=0;i<2;i++){ if( work_param_inout[i] != NULL ) apfw_c_free(work_param_inout[i]); } } else{ *param_inout = apfw_c_alloc(sizeof(server_array_var)); if( *param_inout == NULL){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } } for(i=0;i<2;i++){ work_param_inout[i] = apfw_c_alloc(10); if( work_param_inout[i] == NULL ){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } strcpy( work_param_inout[i], "IO DATA" ); } memcpy(*param_inout,work_param_inout,sizeof(server_array_var)); /* 復帰情報 */ apfw_result = apfw_c_alloc(sizeof(server_array_var)); if( apfw_result == NULL ){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } for(i=0;i<2;i++){ work_ret[i] = apfw_c_alloc(10); if( work_ret[i] == NULL ){ *rtn = APFW_RTN_ERROR; /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */ apfw_env->errcode = -1; /* 例外情報のエラーコードに値を設定 */ return( NULL ); } strcpy( work_ret[i], "PROC END" ); } memcpy(apfw_result,work_ret,sizeof(server_array_var)); *rtn = APFW_RTN_COMMIT; /* 処理結果情報に正常(APFW_RTN_COMMIT)を設定 */ return( apfw_result ); } |