Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$ZF(-4) (ObjectScript)

$ZF(-5) および $ZF(-6) で使用されるユーティリティ関数を提供します。この関数は、コールアウト SDK のコンポーネントです。

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) の最初の呼び出しによってアンロードされます。これにより、ライブラリにアクセスせずにもう片方のクラスが立ち往生する場合があります。このため、InterSystems IRIS は、各 DLL の参照カウントをサポートします。InterSystems IRIS は、$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_namedll_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 のロード

Windows では、bin ディレクトリにインストールされる一部のシステム DLL は、bin ディレクトリ内の別の DLL に依存しています。Windows の検索規則では、bin をそのプロセスの PATH に追加しない限り、bin ディレクトリ内の依存関係は検索されません。ただし、これらの DLL の 1 つが $ZF(-4) または $ZF(-6) を使用して呼び出された場合、InterSystems IRIS は、最初に DLL のロード元のディレクトリで依存 DLL を検索します。その場所で依存 DLL が見つからなかった場合は、既定の検索 PATH が使用されます。InterSystems IRIS はこのために、Windows のロード操作を使用して、DLL のロード時に開始ディレクトリを一時的に PATH に追加します。この一時的な PATH の追加は、DLL が $ZF(-4) または $ZF(-6) によってロードされている場合に使用されます。この一時的な PATH の追加は、DLL が $ZF(-3) によってロードされている場合には使用されません。

DLL の依存関係を解決できない場合、InterSystems IRIS は <DYNAMIC LIBRARY LOAD> エラーを発行します。

インデックス値の確立

システム 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) の使用法の詳細は、"コールアウト SDK の使用法" の “$ZF(-5) を使用したシステム ID によるライブラリへのアクセス” を参照してください。

$ZF(-4)$ZF(-6) の使用法の詳細は、"コールアウト SDK の使用法" の “ユーザ・インデックスによるライブラリへのアクセスでの $ZF(-6) の使用” を参照してください。

関連項目

FeedbackOpens in a new tab