ページの先頭行へ戻る
Interstage Business Application Server アプリケーション開発ガイド
FUJITSU Software

10.2.6 クライアントアプリケーションの作成例

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

■文字列型を使用した作成例

文字列型を使用する場合のクライアントアプリケーションの例を示します。

定義例

サーバアプリケーションがC言語の場合

C言語実行基盤インタフェース生成ツールを使用して、C言語ソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。

IDLファイル

module apfw_mod {
    interface apfw_intf {
        long SAMPLEOP01(in string p1,inout wstring p2,out string p3);
    };
};

アプリケーション情報入力ファイル

<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <client>
        <comment>C:\dev\app_def\src_comment\comment.txt</comment>
    </client>
</apfw-app>
サーバアプリケーションがCOBOLの場合

COBOL開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。

クライアントアプリケーション

文字列型を扱うクライアントアプリケーションでは、文字コードを意識してプログラムを作成する必要があります。

ShiftJISまたはEUCを使用する場合の作成例

C言語アプリケーションからの呼出しの記述例(参考)を参考にしてください。

UTF-8を使用する場合の作成例

ワイド文字の文字列は、UCS2のコードを使用する必要があります。

#include <stdio.h>
#include "apfwcom.h"
#include "apfw_cdr_lib.h"
#include "apfwsccl.h" /* C言語クライアントAPIのヘッダ */
#include "sample_apfwsccl.h"

#define IN_DATA "IN DATA"
/* ワイド文字の場合、コードで設定値を用意する必要がある */

unsigned short INOUT_DATA[8] = { 0xff29, 0xff2f, 0xff3f, 0xff24, 0xff21, 0xff34, 0xff21, 0x0000 };

#define NORMAL_END      0
#define ERROR_END       -1

/* プロセスで1回のみ実施する初期化処理 */
void doInit(){
    ...
}

/* プロセスで1回のみ実施する終了処理 */
void doTerm(){
    ...
}

/* サーバアプリケーションの呼び出しを行う関数 */
int doSomething(char *p1, unsigned short **p2, char **p3, int *r){
    ...

    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP01_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP01_encode_data failed\n");
        goto CLEANUP;
    }
    /* サーバアプリケーション“apl”を呼び出す */
    if(APFW_SCCL_SUCCESS != apfw_sccl_invoke(handle, "apl", send_data, &recv_data, &env) ){
        printf("apfw_sccl_invoke failed\n");
        goto CLEANUP;
    }
    /* INOUTデータの解放 */
    if(*p2 != NULL){
        apfw_c_free(*p2);
        *p2 = NULL;
    }

    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP01_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP01_decode_data failed\n");
        goto CLEANUP;
    }
    return_code = NORMAL_END;

CLEANUP:
    ...

    return return_code;
}

/* クライアントアプリケーションで扱うデータの領域の獲得 / 解放を行う関数 */
void_call_doSomething(){
    char            *p1 = NULL;
    unsigned short  *p2 = NULL;
    char            *p3 = NULL;
    int            result = ERROR_END;

    /* INパラメタ */
    p1 = apfw_c_alloc( strlen(IN_DATA) + 1 );
    if( p1 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset(p1, 0x00, strlen(IN_DATA) + 1);
    strcpy(p1, IN DATA);

    /* INOUTパラメタ */
    p2 = apfw_c_alloc( sizeof(INOUT_DATA));
    if( p2 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p2, 0x00, sizeof(INOUT_DATA) );
    memcpy( p2, INOUT DATA, sizeof(INOUT_DATA) );

    /* クライアントアプリの呼び出し */
    if( NORMAL_END != doSomething( p1, &p2, &p3, &result ) ){
        printf("call doSomething failed\n");
        goto CLEANUP;
    }
    /* INOUTパラメタの出力 */
    printf("Get IN OUT Data [%02x]\n", p2[0]);
    /* OUTパラメタの出力 */
    printf("Get OUT Data [%s]\n", p3);
    /* 復帰値の出力 */
    printf("Result Data [%d]\n", result);

CLEANUP:
    ...
}

■構造体を使用した作成例

構造体型を使用する場合のクライアントアプリケーションの例を示します。

定義例

サーバアプリケーションがC言語の場合

C言語実行基盤インタフェース生成ツールを使用して、C言語ソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。

IDLファイル

struct PARAM1STR {
    string mem11;
    long mem12;
};

struct PARAM2STR {
    string mem21;
    long mem22;
};

struct PARAM3STR {
    string mem31;
    long mem32;
};

module apfw_mod {
    interface apfw_intf {
        long SAMPLEOP02(in PARAM1STR p1,inout PARAM2STR p2,out PARAM3STR p3);
    };
};

アプリケーション情報入力ファイル

<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <client>
        <comment>C:\dev\app_def\src_comment\comment.txt</comment>
    </client>
</apfw-app>
サーバアプリケーションがCOBOLの場合

COBOL開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。

クライアントアプリケーション

#include <stdio.h>
#include "apfwcom.h"
#include "apfw_cdr_lib.h"
#include "apfwsccl.h" /* C言語クライアントAPIのヘッダ */
#include "sample_apfwsccl.h"

#define IN_DATA         "IN DATA"
#define INOUT_DATA      "INOUT DATA"

#define NORMAL_END      0
#define ERROR_END       -1

/* プロセスで1回のみ実施する初期化処理 */
void doInit(){
    ...
}

/* プロセスで1回のみ実施する終了処理 */
void doTerm(){
    ...
}

/* サーバアプリケーションの呼び出しを行う関数 */
int doSomething(PARAM1STR *p1, PARAM2STR  **p2, PARAM3STR **p3, int *r){
    ...

    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP02_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP02_encode_data failed\n");
        goto CLEANUP;
    }
    /* サーバアプリケーション“apl”を呼び出す */
    if(APFW_SCCL_SUCCESS != apfw_sccl_invoke(handle, "apl", send_data, &recv_data, &env) ){
        printf("apfw_sccl_invoke failed\n");
        goto CLEANUP;
    }
    /* INOUTデータの解放 */
    if(*p2 != NULL){
        if((*p2)->mem21 != NULL)
            apfw_c_free((*p2)->mem21);
        apfw_c_free( *p2 );
        *p2 = NULL;
    }

    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP02_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP02_decode_data failed\n");
        goto CLEANUP;
    }
    return_code = NORMAL_END;

CLEANUP:
    ...

    return result_code;
}
/* クライアントアプリケーションで扱うデータの領域の獲得 / 解放を行う関数 */
void call_doSomething(){
    PARAM1STR       *p1  = NULL;
    PARAM2STR       *p2  = NULL;
    PARAM3STR       *p3  = NULL;
    int             result = ERROR_END; 

    /* INパラメタ */
    p1 = apfw_c_alloc(sizeof(PARAM1STR));
    if( p1 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    p1->mem11 = apfw_c_alloc(strlen(IN_DATA) + 1);
    if( p1->mem11 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p1->mem11, 0x00, strlen(IN_DATA) + 1);
    strcpy( p1->mem11, IN_DATA);
    p1->mem12 = -9999;

    /* INOUTパラメタ */
    p2 = apfw_c_alloc(sizeof(PARAM2STR));
    if( p2 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    p2->mem21 = apfw_c_alloc( strlen(INOUT_DATA) + 1);
    if( p2->mem21 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p2->mem21, 0x00, strlen(INOUT_DATA) + 1 );
    strcpy( p2->mem21, INOUT_DATA);
    p2->mem22 = 0;

    /* クライアントアプリの呼び出し */
    if( NORMAL_END != doSomething( p1, &p2, &p3, &result ) ){
        printf("call doSomething failed\n");
        goto CLEANUP;
    }
    /* IN OUTパラメタの出力 */
    printf("Get IN OUT Data [%s]\n", p2->mem21);
    printf("Get IN OUT Data [%d]\n", p2->mem22);

    /* OUTパラメタの出力 */
    printf("Get OUT Data [%s]\n", p3->mem31);
    printf("Get OUT Data [%d]\n", p3->mem32);

    /* 復帰値の出力 */
    printf("Result Data [%d]\n", result);

CLEANUP:
    ...
}

■配列型を使用した作成例

配列型を使用する場合のクライアントアプリケーションの例を示します。

定義例

サーバアプリケーションがC言語の場合

C言語実行基盤インタフェース生成ツールを使用して、C言語ソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。

IDLファイル

struct P1ARRAY {
    string p1array_val[3];
};
struct P2ARRAY {
    string p2array_val[2];
};
struct P3ARRAY {
    string p3array_val[5];
}

module apfw_mod {
    interface apfw_intf {
        long SAMPLEOP03(in P1ARRAY p1,inout P2ARRAY p2,out P3ARRAY p3);
    };
};

アプリケーション情報入力ファイル

<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <client>
        <comment>C:\dev\app_def\src_comment\comment.txt</comment>
    </client>
</apfw-app>
サーバアプリケーションがCOBOLの場合

COBOL開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。

クライアントアプリケーション

#include <stdio.h>
#include "apfwcom.h"
#include "apfw_cdr_lib.h"
#include "apfwsccl.h" /* C言語クライアントAPIのヘッダ */
#include "sample_apfwsccl.h"

#define NORMAL_END      0
#define ERROR_END       -1

/* プロセスで1回のみ実施する初期化処理 */
void doInit(){
    ...
}

/* プロセスで1回のみ実施する終了処理 */
void doTerm(){
    ...
}

/* サーバアプリケーションの呼び出しを行う関数 */
int doSomething(P1ARRAY *p1, P2ARRAY **p2, P3ARRAY **p3, int *r){
    ...

    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP03_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP03_encode_data failed\n");
        goto CLEANUP;
    }
    /* サーバアプリケーション“apl”を呼び出す */
    if(APFW_SCCL_SUCCESS != apfw_sccl_invoke(handle, "apl", send_data, &recv_data, &env) ){
        printf("apfw_sccl_invoke failed\n");
        goto CLEANUP;
    }

    /* INOUTデータの解放 */
    if( *p2 != NULL ){
        if( (*p2)->p2array_val ){
            for( i=0; i < 2; i++ ){
                apfw_c_free((*(*p2)->p2array_val)[i]);
            }
            apfw_c_free( (*p2)->p2array_val );
        }
        apfw_c_free(*p2);
        *p2 = NULL;
    }

    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP03_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP03_decode_data failed\n");
        goto CLEANUP;
    }
        return_code = NORMAL_END;

CLEANUP:
    ...

    return return_code;
}

/* クライアントアプリケーションで扱うデータの領域の獲得 / 解放を行う関数 */
void call_doSomething(){
    unsigned int i = 0;
    P1ARRAY     *p1 = NULL;
    P2ARRAY     *p2 = NULL;
    P3ARRAY     *p3 = NULL;
    int     result = ERROR_END;

    /* INパラメタ */
    p1 = apfw_c_alloc( sizeof(P1ARRAY) );
    if( p1 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p1, 0x00, sizeof(P1ARRAY) )
    p1->p1array_val = apfw_c_alloc( sizeof( *(p1->p1array_val) ) );
    if( p1->p1array_val == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p1->p1array_val, 0x00, sizeof( *(p1->p1array_val) ) );
    for(i=0; i<3; i++){
        (*(p1->p1array_val))[i] = apfw_c_alloc(10);
        if((*(p1->p1array_val))[i] == NULL ){
            printf("malloc failed\n");
            goto CLEANUP;
        }
        memset((*(p1->p1array_val))[i], 0x00, 10);
        sprintf((*(p1->p1array_val))[i], “IN DATA %01d”, i);
    }

    /* INOUTパラメタ */
    p2 = apfw_c_alloc(sizeof(P2ARRAY));
    if( p2 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p2, 0x00, sizeof(P2ARRAY) )
    p2->p2array_val = apfw_c_alloc( sizeof( *(p2->p2array_val) ) );
    if( p2->p2array_val == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p2->p2array_val, 0x00, sizeof( *(p2->p2array_val) ) );
    for(i=0; i<2; i++){
        (*(p2->p2array_val))[i] = apfw_c_alloc(20);
        if( (*(p2->p2array_val))[i]  == NULL ){
            printf("malloc failed\n");
            goto CLEANUP;
        }
        memset( (*(p2->p2array_val))[i], 0x00, 20);
        sprintf((*(p2->p2array_val))[i], "INOUT DATA %01d", i);
    }

    /* クライアントアプリの呼び出し */
    if( NORMAL_END != doSomething( p1, &p2, &p3, &result ) ){
        printf("call doSomething failed\n");
        goto CLEANUP;
    }

    /* INOUTパラメタの出力 */
    for(i=0; i<2; i++){
        printf("p2[%d] = %s\n", i, (*(p2->p2array_val))[i] );
    }
    /* OUTパラメタの出力 */
    for(i=0; i<5; i++){
        printf("p3[%d] = %s\n", i, (*(p3->p3array_val))[i] );
    }
    /* 復帰値の出力 */
    printf("result = %d\n", result );
    }

CLEANUP:
    ...
}

備考.IDLファイルに定義した配列の長さが超過または不足した場合は、アプリケーションエラーが発生します。

■バイナリデータを使用した作成例

バイナリを使用する場合のクライアントアプリケーションの例を示します。

定義例

サーバアプリケーションがC言語の場合

C言語実行基盤インタフェース生成ツールを使用して、C言語ソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。

IDLファイル

typedef sequence<octet> PARAM1BIN;
typedef sequence<octet> PARAM2BIN;
typedef sequence<octet> PARAM3BIN;

module apfw_mod {
    interface apfw_intf {
        long SAMPLEOP04(in PARAM1BIN p1,inout PARAM2BIN p2,out PARAM3BIN p3);
    };
};

アプリケーション情報入力ファイル

<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <client>
        <comment>C:\dev\app_def\src_comment\comment.txt</comment>
    </client>
</apfw-app>
サーバアプリケーションがCOBOLの場合

COBOL開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。

クライアントアプリケーション

#include <stdio.h>
#include "apfwcom.h"
#include "apfw_cdr_lib.h"
#include "apfwsccl.h" /* C言語クライアントAPIのヘッダ */
#include "sample_apfwsccl.h"

#define NORMAL_END      0
#define ERROR_END       -1

/* プロセスで1回のみ実施する初期化処理 */
void doInit(){
    ...
}

/* プロセスで1回のみ実施する終了処理 */
void doTerm(){
    ...
}

/* サーバアプリケーションの呼び出しを行う関数 */
int doSomething(PARAM1BIN *p1, PARAM2BIN **p2, PARAM3BIN **p3, int *r){
    ...

    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP04_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP04_encode_data failed\n");
        goto CLEANUP;
    }

    /* サーバアプリケーション“apl”を呼び出す */
    if(APFW_SCCL_SUCCESS != apfw_sccl_invoke(handle, "apl", send_data, &recv_data, &env) ){
        printf("apfw_sccl_invoke failed\n");
        goto CLEANUP;
    }
    /* INOUTデータの解放 */
    if(*p2 != NULL){
        if((*p2)->val != NULL){
            apfw_c_free((*p2)->val);
        }
        apfw_c_free(*p2);
        *p2 = NULL;
    }

    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP04_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP04_decode_data failed\n");
        goto CLEANUP;
    }

    return_code = NORMAL_END;

CLEANUP:
    ...

    return return_code;
}

/* クライアントアプリケーションで扱うデータの領域の獲得 / 解放を行う関数 */
void call_doSomething(){
    PARAM1BIN       *p1 = NULL;
    PARAM2BIN       *p2 = NULL;
    PARAM3BIN       *p3 = NULL;
    int                     result = ERROR_END;
    unsigned int	 i =0;


    /* INパラメタ */
    p1 = apfw_c_alloc(sizeof(apfwSequenceOctet));
    if( p1 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    p1->val = apfw_c_alloc(15);
    if( p1->val == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p1->val, 0x00, 15);
    memcpy( p1->val, "IN DATA", 7);
    p1->arealen = 15;
    p1->vallen  = 7;

    /* INOUTパラメタ */
    p2 = apfw_c_alloc(sizeof(apfwSequenceOctet));
    if( p2 == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    p2->val = apfw_c_alloc(15);
    if( p2->val == NULL ){
        printf("malloc failed\n");
        goto CLEANUP;
    }
    memset( p2->val, 0x00, 15);
    memcpy( p2->val, "INOUT DATA", 10);
    p2->arealen = 15;
    p2->vallen = 10;

    /* クライアントアプリの呼び出し */
    if( NORMAL_END != doSomething( p1, &p2, &p3, &result ) ){
        printf("call doSomething failed\n");
        goto CLEANUP;
    }

    /* INOUTパラメタの出力 */
    for(i=0; i < p2->vallen ;i++){
        printf("p2 Val[%d]     : [%02x]\n", i, (p2->val)[i] );
    }
    /* OUTパラメタの出力 */
    for(i=0; i < p3->vallen ;i++){
        printf("p3 Val[%d]     : [%02x]\n", i, (p3->val)[i] );
    }
    /* 復帰値の出力 */
    printf("result Val     : [%d]\n", result );

CLEANUP:
    ...
}

■パラメタを省略する場合の作成例

以下のデータ型について、クライアントアプリケーションからサーバアプリケーションへ送信するデータを省略することができます。

文字列型
    ...

    //値の設定
    /* INパラメタ */
    p1 = NULL;

    /* INOUTパラメタ */
    *p2 = NULL;

    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP01_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP01_encode_data failed\n");
        return;
    }

    ...

    //値の出力
    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP01_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP01_decode_data failed\n");
        return;
    }
    /* INOUTパラメタの出力 */
    if(*p2 != NULL){
        printf("Get IN OUT Data [%s]\n", *p2);
    }
    else{
        printf("Get IN OUT Data [NULL]\n");
    }
    /* OUTパラメタの出力 */
    if(*p3 != NULL){
        printf("Get OUT Data [%s]\n", *p3);
    }
    else{
        printf("Get OUT Data [NULL]\n");
    }

    ...
構造体型
    ...

    /* INパラメタ */
    p1 = NULL;

    /* INOUTパラメタ */
    *p2 = NULL;

    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP02_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP02_encode_data failed\n");
        return;
    }

    ...

    //値の出力
    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP02_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP02_decode_data failed\n");
        return;
    }

    /* IN OUTパラメタの出力 */
    if(*p2 != NULL){
        if((*p2)->mem21 != NULL){
            printf("Get IN OUT Data mem21 [%s]\n", (*p2)->mem21);
        }
        else{
            printf("Get IN OUT Data mem21 [NULL]\n");
        }
        printf("Get IN OUT Data mem22 [%d]\n", (*p2)->mem22);
    }
    else{
        printf("Get IN OUT Data [NULL]\n");
    }
    /* OUTパラメタの出力 */
    if(*p3 != NULL){
        if((*p3)->mem31 != NULL){
            printf("Get OUT Data mem31 [%s]\n", (*p3)->mem31);
        }
        else{
            printf("Get OUT Data mem31 [NULL]\n");
        }
        printf("Get OUT Data mem32 [%d]\n", (*p3)->mem32);
    }
    else{
        printf("Get OUT Data [NULL]\n");
    }

    ...
配列型
    ...

    //値の設定
    /* INパラメタ */
    p1 = NULL;

    /* INOUTパラメタ */
    *p2 = NULL;
    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP03_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP03_encode_data failed\n");
        return;
    }

    ...

    //値の出力
    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP03_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP03_decode_data failed\n");
        return;
    }

    /* INOUTパラメタの出力 */
    if(*p2 != NULL){
        for(i=0; i<2; i++){
            printf("p2[%d] = %d\n", i, (*p2)[i]);
        }
    }
    else {
        printf("Get IN OUT Data [NULL]\n");
    }
    /* OUTパラメタの出力 */
    if(*p3 != NULL){
        for(i=0; i<5; i++){
            if(((*(*p3))[i])[0] != NULL){
                printf("p3[%d] = %s\n", i, (*(*p3))[i]);
            }
            else {
                printf("p3[%d] = NULL\n", i);
            }
        }
    }
    else {
        printf("Get OUT Data [NULL]\n");
    }

    ...
バイナリ型
    ...

    //値の設定
    /* INパラメタ */
    p1 = NULL;

    /* INOUTパラメタ */
    *p2 =NULL;

    /* 送信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP04_encode_data(handle, p1, p2, p3, &send_data, &env)){
        printf("SAMPLEOP04_encode_data failed\n");
        return;
    }

    ...

    //値の出力
    /* 受信用データ変換関数 */
    if(APFW_SCCL_SUCCESS != SAMPLEOP04_decode_data(handle, &recv_data, r, p1, p2, p3, &env)){
        printf("SAMPLEOP04_decode_data failed\n");
        return;
    }

    /* INOUTパラメタの出力 */
    if(*p2 != NULL){
        for(i=0;i<(*p2)->vallen;i++){
            if((*p2)->val[i] != NULL){
                printf("Val[%d]     : [%02x]\n", i,(*p2)->val[i]);
            }
            else {
            printf("Val[%d]     : [NULL]\n", i);
            }
        }
    }
    /* OUTパラメタの出力 */
    if(*p3 != NULL){
        for(i=0;i<(*p3)->vallen;i++){
            if((*p3)->val[i] != NULL){
                printf("Val[%d]     : [%02x]\n", i, (*p3)->val[i]);
            }
            else {
                printf("Val[%d]     : [NULL]\n", i);
            }
        }
    }

    ...