2012-02-02 9 views
1

私は3つのライブラリA、B、Cを持っています。ライブラリの順序は、Bの上にA、Cの上にBです。ライブラリAにはプログラムPa、ライブラリBにはプログラムPbがあります。 Pbは同じ名前とパラメータリストを持っていますが、それらの機能はわずかに異なります。今ではPaを呼び出すライブラリCにプログラムPcがありますが、目的の結果を得るためにPbを呼び出す必要があります。問題は、ライブラリAをライブラリリストから削除することができず、ライブラリBの下に移動できず、ライブラリAからPaを削除できないことです.Paを非表示にしてPc呼び出しPbを代わりに行うことは可能ですか?プログラムのライブラリ名はプログラムでコード化することはできませんので、実行時に決定する必要があります。同じライブラリリスト内の同じ名前のプログラムの場合、どのライブラリを呼び出すかを積極的に制御する方法は?

+0

より良い情報を提供できる場合は、より良い回答を得ることができます。 Pa、Pb、およびPcはどの言語で書かれていますか? Pcからどの言語を呼び出す必要がありますか? Pcを変更する機能はありますか? –

+0

この問題はCLにとっての問題です。 –

答えて

3

プログラムライブラリ名は、プログラムでコード化することはできませんあなたはそれが店の標準のためか、実装上の困難であることを意味しますか?それは望ましくない何か他のものか?

いくつかのアプローチがあります。どの言語を書いているのか分かりませんので、私は擬似コードを使って説明します。

1)サブルーチン

when condition = A 
    do subrA 
when condition = B 
    do subrB 
... 

subrA 
    call libA/pgmA parm(...) 

subrB 
    call libB/pgmB parm(...) 

2)動的と呼ばれるプログラムが呼び出し元に値を返さない場合、これは最高の作品

define command char 128 

when condition = A 
    command = 'call liba/pgma parm(' 
when condition = B 
    command = 'call libb/pgmb parm(' 
end 

command = command + parm1 + ' ' + parm2 + ')' 
call qcmdexc (command 128) 

を呼び出します。

+0

これは、最良の方法。とにかくありがとう。 –

2

使用するシステムをシステムに知らせずに、システムがライブラリリストを上書きできるようにするかどうかを尋ねてきます。私はそれがどうなるかわからない。

私はあなたがライブラリBを使ってあなたのプログラム呼び出しを修飾しなければならないと思うと思います。あなたのプログラムでライブラリ名をハードコーディングできなければ、何とかソフトコードすることができます。

/* CL example */ 
dcl &libname *char 10 
rtvdtaara dtaara(WHICH_LIB) rtnvar(&libname) 
call pgm(&libname/PGMNAME) parm(...) 

これで、ライブラリリストの管理に加えて、このデータ領域(またはライブラリ名を保持するために使用するもの)を維持する必要があります。

+0

残念ながら、ライブラリの名前を格納する場所はありません。他の方法は? –

+1

私はあなたのライブラリーリストを変更することなく、または(2)ライブラリーBを見るように言うことなく、ライブラリーB内のプログラムを見つけるようにシステムに指示する方法を知らない。 – dmc

1

ライブラリリストは、システム部分、製品ライブラリ、現在のライブラリ、ユーザー部分の4つのコンポーネントで構成されています。通常の状況下では、システムを修正すべきではありません。 (変更後は制限)ただし、他の部分はすべて開いています。

最も可能性の高いスポットは「製品ライブラリ」部分にあります。これは2つの図書館を保持することができますが、1つを見るか、見ないことが最も一般的です。 * CMDまたは* MENUオブジェクトを作成する場合は、そのオブジェクトにプロダクト・ライブラリーを割り当てることができます。 (現在のライブラリも設定することができます)。コマンドの場合、そのコマンドが実行されるたびに、コマンドが終了するまで関連する製品ライブラリがライブラリリストに追加されます。その時点で、ライブラリは削除されます。これらがCLプログラムの場合、ライブラリのリストは、あなたが知っているかどうかにかかわらず定期的にライブラリリストに追加されたり削除されたりする可能性があります。

製品ライブラリの一般的なロジックは、ライブラリを最初の開いた場所に追加することです。両方のスポットが占有されている場合は、上部のライブラリを取得し、下部のライブラリを上に移動し、ライブラリを最下部に追加します。プログラムが終了すると、プロダクト・ライブラリーは開始時と同じようにプロセスが逆になります。

製品ライブラリは、現在のライブラリとライブラリリストのユーザー部分の上にあります。 Change Library List (QLICHGLL) APIを使用して製品ライブラリを設定します。

関連する問題