サービスプログラムから変数をエクスポートし、両方のプログラムをサービスプログラムにバインドすることができます。変数をプログラムにインポートします。プログラムが同じ活動化グループにあり、サービス・プログラムが* CALLERであるか、同じ名前の活動化グループに入っている限り、両方のプログラムのインポート変数は、サービス・プログラム内の同じエクスポートされた変数にアクセスします。
すべてのIMPORT変数とEXPORT変数を同じように定義するのに非常に注意する必要があります。それを行う方法は、このような/コピーファイルで変数を定義することです:
dcl-s shared_variable varchar(1000000)
/if defined(do_export)
export
/else
import
/endif
;
SRVPGMモジュールソース:プログラムの
ctl-opt nomain;
/define do_export
/copy copyfile
出典:
/copy copyfile
shared_variable = 'abcde';
if shared_variabe = '12345';
...
別のアプローチEXPORTキーワードを使用しないでサービス・プログラムに変数を定義し、プロシージャーを使用して値を取得および設定することです。これはIMPORT/EXPORTを使用するより複雑に思えますが、IMPORT/EXPORTを使用して変数を共有することによって発生する問題をデバッグするのは難しいため、長期的には簡単になります。たとえば、変数を明示的に値に設定する前に変数を使用したくない場合は、「get」プロシージャでそれを処理できます。
コピーファイル:
dcl-s shared_variable_t varchar(1000000);
dcl-pr set_shared_variable;
val like(shared_variable_t) const;
end-pr;
dcl-pr get_shared_variable like(shared_variable_t) end-pr;
SRVPGMモジュールソース:プログラムの
ctl-opt nomain;
/copy copyfile
dcl-s g_shared_variable like(shared_variable_t);
dcl-proc set_shared_variable export;
dcl-pi *n;
val like(shared_variable_t) const;
end-pi;
g_shared_variable = val;
end-proc;
が出典:
/copy copyfile
set_shared_variable ('abcde');
if get_shared_variable() = '12345';
...
あなたはあなたのメインプログラムが* USRSPCオブジェクトを作成しており、取得することがありますQUSPTRUS APIでそれへのポインター。次に、そのポインタに変数BASED()を設定します。また、サブプログラムはAPIを呼び出し、BASED()変数の宣言を行います。 2つのプログラムは同じ値を参照します。 – user2338816