クライアントアプリケーションの作成例を以下に示します。
■文字列型を使用した作成例
文字列型を使用する場合のクライアントアプリケーションの例を示します。
◆定義例
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);
}
}
}
... |