Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$ZF(-3)

DLL (ダイナミック・リンク・ライブラリ) をロードし、ライブラリ関数を実行します。

Synopsis

$ZF(-3,dll_name,func_name,args)

パラメータ

dll_name ロードする DLL (ダイナミック・リンク・ライブラリ) の名前。引用符付き文字列として指定されます。DLL が既にロードされている場合は、dll_name を NULL 文字列 ("") として指定できます。
func_name オプション — DLL 内で実行される関数名。引用符付き文字列として指定されます。
args オプション — 関数に渡す引数の、コンマ区切りのリスト。

概要

$ZF(-3) を使用して、DLL (ダイナミック・リンク・ライブラリ) をロードし、指定された関数をその DLL から実行することができます。$ZF(-3) は、関数の返り値を返します。

$ZF(-3) は、以下の方法のいずれかで呼び出されます。

DLL をロードするには、以下の構文を使用します。

   SET x=$ZF(-3,"mydll")

DLL をロードし、その DLL にある関数を実行するには、以下の構文を使用します。

   SET x=$ZF(-3,"mydll","$$myfunc",1)

$ZF(-3) を使用して DLL をロードすると、その DLL が現在の DLL となり、以前に $ZF(-3) を呼び出したときにロードされた DLL を自動的にアンロードします。

以前の $ZF(-3) でロードされた DLL にある関数を実行するには、以下のように現在の DLL を NULL 文字列で指定することで、前の関数の実行速度を上げることができます。

   SET x=$ZF(-3,"","$$myfunc2",1)

(以前の $ZF(-3) 呼び出しでロードされた) 現在の DLL を明示的にアンロードするには、以下の構文を使用します。

   SET x=$ZF(-3,"")

$ZF(-3) は、1 つの DLL のみロードします。DLL をロードすると、以前の DLL がアンロードされます。また、現在ロードされている DLL を明示的にアンロードすることもできます。これにより、現在ロードされている DLL が存在しないことになります。(ただし、$ZF(-3) のロードやアンロードが、$ZF(-5)$ZF(-6) で使用するロードやアンロードに影響を与えることはありません。詳細は以下に説明しています。)

指定された DLL 名はフル・パス名、またはパス名の一部分です。パス名の一部分を指定する場合、Caché はそれを現在のディレクトリに正規化します。一般的に、DLL はバイナリ・ディレクトリ (“bindir”) に格納されます。バイナリ・ディレクトリの位置を確認するには、%SYSTEM.UtilOpens in a new tab クラスの BinaryDirectory()Opens in a new tab メソッドを呼び出します。詳細は、"InterSystems Class Reference" を参照してください。

メモ

ダイナミック・リンク・ライブラリ

DLL は、実行時に呼び出されたり、ロードされるルーチンを含むバイナリ・ライブラリです。DLL がロードされるとき、Caché はその内部で GetZFTable() という名前の関数を検索します。GetZFTable() が存在する場合、DLL にある関数のテーブルに対するポインタを返します。このテーブルを使用して、$ZF(-3) は指定された関数を DLL から呼び出します。

複数の DLL のロード

$ZF(-3) を呼び出すと、1 回に 1 つの DLL をロードします。DLL をロードすると、以前の DLL はアンロードされます。複数の DLL を同時にロードするには、$ZF(-5) または $ZF(-6) を使用して DLL 関数を実行します。$ZF(-3) を使用した DLL のロードやアンロードは、$ZF(-5)$ZF(-6) で使用するためにロードされた DLL に影響を与えません。

関連項目

FeedbackOpens in a new tab