$ZF(-4)
Synopsis
$ZF(-4,1,dll_name) $ZF(-4,n,dll_id,func_name) $ZF(-4,n,dll_id,decr_flag) $ZF(-4,n,dll_index,dll_name) $ZF(-4,n,dll_index,decr_flag)
パラメータ
n | 実行する操作のタイプを示すコード。1= 名前によって DLL をロードします。2= ID によって DLL をアンロードします。3= ID によって DLL の関数を検索します。4= インデックスによって DLL をアンロードします。5= システム DLL インデックス・テーブルにエントリを作成します。6= システム DLL インデックス・テーブルからエントリを削除します。7= プロセス DLL インデックス・テーブルにエントリを作成します。8= プロセス DLL インデックス・テーブルからエントリを削除します。 |
dll_name | ダイナミック・リンク・ライブラリ (DLL) の名前。n=1、5、または 7 で使用します。 |
dll_id | ロードされているダイナミック・リンク・ライブラリ (DLL) の ID 値。n=2 または 3 で使用します。 |
dll_index | DLL インデックス・テーブル内のダイナミック・リンク・ライブラリ (DLL) に対するユーザ定義のインデックス。一意でゼロ以外の正の整数にする必要があります。1024 から 2047 までの数値は、システムでの使用に予約されています。n=4、5、6、7、または 8 と一緒に使用します。 |
func_name | DLL 内で検索する関数の名前。n=3 の場合のみ使用します。 |
decr_flag | オプション — DLL 参照カウントをデクリメントするためのフラグ。n=2 または 4 で使用します。 |
概要
$ZF(-4) は、DLL または DLL 内の関数の ID 値の確立に使用できます。この ID 値は、$ZF(-5) が関数を実行する際に使用されます。
$ZF(-4) は、DLL インデックス・テーブルに対するインデックスの確立に使用できます。このインデックス値は、$ZF(-6) が関数を実行する際に使用されます。
-
$ZF(-4,1) を使用することで、共有ライブラリを明示的にロードできます。これにより、ライブラリがロードされ、$ZF(-5) でライブラリ関数にアクセスするために使用できるハンドルが返されます。
-
$ZF(-3) を使用することで、単一の共有ライブラリを明示的にロードできます。これにより、単一のアクティブ・ライブラリがロードされ、そのメソッドが呼び出されます。
-
$ZF(-4,5) または $ZF(-4,7) でライブラリにインデックスを付けた後、$ZF(-6) を使用して共有ライブラリを暗黙的にロードできます。
ID 値の確立
DLL をロードしその ID を返すには、次の構文を使用します。
dll_id=$ZF(-4,1,dll_name)
$ZF(-4,1) によってロードされた DLL から関数を検索し、その関数に対する ID を返すには、次の構文を使用します。
func_id=$ZF(-4,3,dll_id,func_name)
$ZF(-4,.3) によって配置された関数を実行するには、$ZF(-5) を使用します。
$ZF(-4,1) によってロードされた特定の DLL をアンロードするには、次の構文を使用します。
$ZF(-4,2,dll_id)
$ZF(-4,1) によってロードされたすべての DLL をアンロードするには、次の構文を使用します。
$ZF(-4,2)
DLL ロードのインクリメントおよびデクリメント
2 つのクラスで同じライブラリをロードした場合、そのライブラリは、$ZF(-4,2,dll_id) または $ZF(-4,4,dll_index) の最初の呼び出しによってアンロードされます。これにより、ライブラリにアクセスせずにもう片方のクラスが立ち往生する場合があります。このため、Caché は、各 DLL の参照カウントをサポートします。Caché は、$ZF(-4,1,dll_name) でライブラリがロードされた回数の参照カウントを保持します。$ZF(-4,1,dll_name) を呼び出すごとに参照カウントが増加します。
$ZF(-4,2) は、オプションのデクリメント・フラグ引数 decr_flag を提供します。$ZF(-4,2,dll_id,1) を呼び出すごとに参照カウントが 1 ずつ減少します。$ZF(-4,2,dll_id,1) の呼び出しにより、参照カウントがゼロになった場合にライブラリがアンロードされます。$ZF(-4,2,dll_id) (または $ZF(-4,2,dll_id,0)) を呼び出すと、参照カウントは無視され、直ちにライブラリがアンロードされます。
$ZF(-4,5) または $ZF(-4,7) を呼び出すと、ライブラリ・インデックスが作成されます。その後、関数を実行するために $ZF(-6) を呼び出すと、ライブラリが暗黙的にロードされ、参照カウントが増加します。$ZF(-4,4,dll_index,1) を呼び出すごとにこの参照カウントが 1 ずつ減少します。
dll_name と dll_index によって確立された参照カウント間の参照カウントの相互作用は以下のとおりです。
-
参照カウントがゼロにならない限り、$ZF(-4,1,dll_name) でロードされたライブラリは、$ZF(-4,4,dll_index,1) の呼び出しによってアンロードされません。
-
参照カウントに関係なく、$ZF(-4,1,dll_name) でロードされたライブラリは、$ZF(-4,2,dll_id) または $ZF(-4,4,dll_index) (デクリメント・フラグ引数なし) のいずれかによって直ちにアンロードされます。
-
参照カウントがゼロになった場合でも、$ZF(-6) で暗黙的にロードされたライブラリは、$ZF(-4,2,dll_id,1) によってアンロードされません。$ZF(-4,4,dll_index,1) によってのみアンロード可能です。
-
参照カウントに関係なく、$ZF(-6) で暗黙的にロードされたライブラリは、$ZF(-4,2,dll_id) または $ZF(-4,4,dll_index) (デクリメント・フラグ引数なし) のいずれかによって直ちにアンロードされます。
参照カウントに関係なく、また $ZF(-4,1,dll_name) でロードされたのか $ZF(-6) で暗黙的にロードされたのかに関係なく、dll_id 引数のない $ZF(-4,2) は、すべてのライブラリを直ちにアンロードします。
インデックス値の確立
システム DLL インデックス・テーブルの DLL をインデックスするには、次の構文を使用します。
$ZF(-4,5,dll_index,dll_name)
プロセス DLL インデックス・テーブルの DLL をインデックスするには、次の構文を使用します。
$ZF(-4,7,dll_index,dll_name)
$ZF(-4,5) または $ZF(-4,7) によってインデックスされた関数を検索し、実行するには、$ZF(-6) を使用します。
インデックス付きの DLL をアンロードするには、次の構文を使用します。
$ZF(-4,4,dll_index)
システム DLL インデックス・テーブルのインデックス・エントリを 1 つ削除するには、次の構文を使用します。
$ZF(-4,6,dll_index)
プロセス DLL インデックス・テーブルのインデックス・エントリを 1 つ削除するには、次の構文を使用します。
$ZF(-4,8,dll_index)
プロセス DLL インデックス・テーブルのすべてのインデックス・エントリを削除するには、次の構文を使用します。
$ZF(-4,8)
$ZF(-4) と $ZF(-5) の使用法の詳細は、"Caché コールアウト・ゲートウェイの使用法" の “システム ID によるライブラリへのアクセスでの $ZF(-5) の使用” を参照してください。
$ZF(-4) と $ZF(-6) の使用法の詳細は、"Caché コールアウト・ゲートウェイの使用法" の “ユーザ・インデックスによるライブラリへのアクセスでの $ZF(-6) の使用” を参照してください。