クライアントアプリケーションの作成例を以下に示します。
■文字列型を使用した作成例
文字列型を使用する場合のクライアントアプリケーションの例を示します。
◆定義例
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開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
プロジェクトコンテンツ | ワークスペース内に新規プロジェクトを作成(初期値) |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 P1 PICTURE X(16). |
P2.cbl
01 P2 PICTURE N(8). |
P3.cbl
01 P3 PICTURE X(16). |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | SAMPLEOP01 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment_sv.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| コメントファイル名 | C:\dev\app_def\src_comment\comment_cl.txt |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | P1 |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P2 |
パラメタタイプ | IN | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P3 |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントアプリケーション
文字列型を扱うクライアントアプリケーションでは、文字コードを意識してプログラムを作成する必要があります。
C言語アプリケーションからの呼出しの記述例(参考)を参考にしてください。
ワイド文字の文字列は、UCS2のコードを使用する必要があります。
#include <stdio.h> 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言語ソースを生成する場合の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開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
プロジェクトコンテンツ | ワークスペース内に新規プロジェクトを作成(初期値) |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 PARAM1STR. 02 MEM11 PICTURE X(16). 02 MEM12 PICTURE S9(9) COMP-5. |
P2.cbl
01 PARAM2STR. 02 MEM21 PICTURE X(16). 02 MEM22 PICTURE S9(9) COMP-5 |
P3.cbl
01 PARAM3STR. 02 MEM31 PICTURE X(16). 02 MEM32 PICTURE S9(9) COMP-5. |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | SAMPLEOP02 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment_sv.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| コメントファイル名 | C:\dev\app_def\src_comment\comment_cl.txt |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM1STR |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM2STR |
パラメタタイプ | INOUT | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM3STR |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントアプリケーション
#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言語ソースを生成する場合の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開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
プロジェクトコンテンツ | ワークスペース内に新規プロジェクトを作成(初期値) |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 P1ARRAY. 02 P1ARRAY-VAL PICTURE X(16) OCCURS 3. |
P2.cbl
01 P2ARRAY. 02 P2ARRAY-VAL PICTURE X(16) OCCURS 2. |
P3.cbl
01 P3ARRAY. 02 P3ARRAY-VAL PICTURE X(16) OCCURS 5. |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | SAMPLEOP03 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment_sv.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| コメントファイル名 | C:\dev\app_def\src_comment\comment_cl.txt |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | P1ARRAY |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P2ARRAY |
パラメタタイプ | INOUT | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P3ARRAY |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントアプリケーション
#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言語ソースを生成する場合の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開発支援ツールを使用してC言語ソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
プロジェクトコンテンツ | ワークスペース内に新規プロジェクトを作成(初期値) |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 PARAM1BIN. 49 AREALEN PICTURE 9(9) COMP-5. 49 VALLEN PICTURE 9(9) COMP-5. 49 VAL USAGE POINTER. |
P2.cbl
01 PARAM2BIN. 49 AREALEN PICTURE 9(9) COMP-5. 49 VALLEN PICTURE 9(9) COMP-5. 49 VAL USAGE POINTER. |
P3.cbl
01 PARAM3BIN. 49 AREALEN PICTURE 9(9) COMP-5. 49 VALLEN PICTURE 9(9) COMP-5. 49 VAL USAGE POINTER. |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | SAMPLEOP04 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment_sv.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| コメントファイル名 | C:\dev\app_def\src_comment\comment_cl.txt |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM1BIN |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM2BIN |
パラメタタイプ | IN | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM3BIN |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントアプリケーション
#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); } } } ... |