2016-08-18 6 views
3

RPGが私のメインの関数内の関数によってアクセスできるグローバル変数を定義するために彼らの方法です呼び出す機能にアクセスすることができ、RPGプログラムでグローバル変数を定義していますか?はどのようにAS400</p> <p>上

たとえば、私は私のメインのRPGプログラムを持っています(それは "MAIN_PROGRAM"と呼ばれ、別のRPGプログラム(SUB_PROGRAMと呼ぶことができます)を呼びます)私はMAIN_PROGRAMに文字列変数 "ABC"私のSUB_PROGRAMを呼び出すと、私のSUB_PROGRAM内の変数を使用します。

なぜ私は入力パラメータとしてSUB_PROGRAMに送りたくないのですか?私のMAIN_PROGRAMはジェネレータ(CA-PLEX)でコンパイルされています。私は60 000文字列のサイズに制限を与えます。私はこれを回避する方法を得たが、PLEXは60 000文字でそれをカットするので、それをSUB_PROGRAMに渡すことはできません。

私は何をしたいですか? Gloを作成するSUB_PROGRAMによって参照される変数bal変数。

私はRPGプログラミングの新人です。私はプログラムのソースを編集することができますが、グローバル変数などを作成できるかどうかはわかりません。

+2

あなたはあなたのメインプログラムが* USRSPCオブジェクトを作成しており、取得することがありますQUSPTRUS APIでそれへのポインター。次に、そのポインタに変数BASED()を設定します。また、サブプログラムはAPIを呼び出し、BASED()変数の宣言を行います。 2つのプログラムは同じ値を参照します。 – user2338816

答えて

4

2つのプログラムの間には?同じEXPORTキーワードとIMPORTキーワードを変数d-specに使用することができます。これらのキーワードは、同じPGM(または* SRVPGM)オブジェクトにバインドされています。

プログラムとして残す必要がある場合は、外部データ領域としてデータを渡すことをお勧めします。

どのバージョンのPlexを使用していますか?私は6.1以来それを使用していません...現在のバージョンがRPGLEに追いついていない場合、私は多少驚くでしょう。

まだお持ちでない場合は、CA Plex/2E communityは役立つ参考情報です。

+0

こんにちは、私はPlex 6.1を使用しています。輸出入のキーワードを見ていただき、caフォーラムに投稿しました。 – Renier

+0

https://communities.ca.com/message/241907104 – Renier

7

サービスプログラムから変数をエクスポートし、両方のプログラムをサービスプログラムにバインドすることができます。変数をプログラムにインポートします。プログラムが同じ活動化グループにあり、サービス・プログラムが* 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'; 
    ... 
関連する問題