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?

はじめに

InterSystems コールアウト・ゲートウェイを使用すると、Caché アプリケーションがシェルまたはオペレーティング・システム・コマンドを呼び出し、生成されたプロセスで外部プログラムを実行し、特別に記述された共有ライブラリから関数を呼び出すことができます。コールアウト・ゲートウェイは、Caché $ZF システム関数内に含まれる一連の関連した関数として実装されます。

以下の項目について説明します。

コールアウト・ゲートウェイの概念および用語

このドキュメントの以降の部分を読む前に理解しておく必要がある重要な概念について説明します。

個々の $ZF 関数の識別

$ZF スイート内の個々の関数は、関数呼び出しの最初の引数によって識別されます。これは -100 または -3-6 の負の数字です。例えば、オペレーティング・システム・コマンドを呼び出す関数は $ZF(-100,<oscommand>) の形式を持ちます。ここで、<oscommand> は、実行されるコマンドを含む文字列です。この関数について述べる場合には、$ZF(-100) と示されます。同様に、その他の関数は、実際の関数呼び出しの最初のパラメータのみを使用して $ZF(-3)$ZF(-6) と示されます。

$ZF(-4) 関数は、実際は最初の 2 つのパラメータ $ZF(-4,1)$ZF(-4,8) によって識別される 8 つのユーティリティ関数のコンテナであるため、特殊なケースです。

これらの関数の概要については、この章で後述する “$ZF 関数の概要” を参照してください。すべての $ZF 関数の完全なリスト、それらの使用方法に関する情報、および詳細な情報および例へのリンクについては、“InterSystems コールアウトのクイック・リファレンス” を参照してください。

コールアウト・ライブラリ

このドキュメントでは、共有ライブラリという用語は、動的にリンクされたファイル (Windows の DLL ファイル、UNIX® および関連オペレーティング・システムの SO ファイル、または OpenVMS の共有可能イメージ・ファイル) を示します。コールアウト・ライブラリは、コールアウト・ゲートウェイへのフックを含む共有ライブラリであり、多様な $ZF 関数が実行時にロードして、その関数を呼び出すことができるようにします。コールアウト・ライブラリは、通常は C で記述されますが (“互換性のある言語とコンパイラ” を参照)、ご使用の C コンパイラで認識される呼び出し規則を使用するその他のコンパイル言語で記述される場合もあります。

コールアウト・ライブラリの記述方法の詳細は、“InterSystems コールアウト・ライブラリの作成” を参照してください。

コールアウト・ライブラリのインタフェース

すべての $ZF 関数 ($ZF(-100) を除く) は、コールアウト・ライブラリへの何らかのアクセス形式を提供するために使用されます。$ZF(-3)$ZF(-5)、および $ZF(-6) 関数は、コールアウト・ライブラリ関数の呼び出しに 3 つの異なるインタフェースを提供します。$ZF(-4) は、$ZF(-5) および$ZF(-6) インタフェースと一緒に使用される多様なユーティリティ関数のコンテナです。

コールアウト・ライブラリへの多様なアクセス方法の詳細は、“コールアウト・ライブラリ関数の呼び出し” を参照してください。

$ZF 関数の概要

$ZF 関数スイートには、以下の関数があります。

$ZF(-100) 関数

$ZF(-100) 関数は、シェル・コマンドおよびオペレーティング・システム・サービスの呼び出しの実行に使用されます。これは、コールアウト・ライブラリへのアクセスには使用されず、前もって設定せずに呼び出すことができます。

詳細は、“$ZF(-100) を使用したプログラムまたはシステム・コマンドの実行” を参照してください。

$ZF(-3) 関数

$ZF(-3) 関数は、コールアウト・ライブラリをロードして単一の文でライブラリ関数を呼び出す簡単な方法です。ライブラリとその関数の両方が名前で指定され、ライブラリは異なるライブラリへの呼び出しによって置き換えられるまでメモリ内に残ります。

詳細は、“単純なライブラリ関数呼び出しでの $ZF(-3) の使用” を参照してください。

$ZF(-4) 関数

$ZF(-4) 関数は、8 つのユーティリティ関数セットのコンテナです。$ZF(-5) 関数インタフェースは、関数 $ZF(-4,1)$ZF(-4,3) を使用し、$ZF(-6) 関数インタフェースは、関数 $ZF(-4,5)$ZF(-4,8) を使用します。詳細は、以下の説明を参照してください。

$ZF(-5) 関数インタフェース

$ZF(-5) 関数およびそのユーティリティ関数を使用すると、複数のライブラリを効率的に処理できます。ライブラリおよびその関数の両方がシステム定義の ID 値によって識別されます。複数のライブラリを同時に仮想メモリ内に入れることができます。以下の $ZF(-4) 関数はライブラリのロードやアンロード、およびライブラリや関数 ID 値の取得に使用されます。

  • $ZF(-4,1) は、名前によって指定されるライブラリをロードし、ライブラリ ID を返します。

  • $ZF(-4,2) は、ライブラリをアンロードします。

  • $ZF(-4,3) は、指定されたライブラリ ID および関数名の関数 ID を返します。

詳細は、“システム ID によるライブラリへのアクセスでの $ZF(-5) の使用” を参照してください。

$ZF(-6) 関数インタフェース

$ZF(-6) 関数およびそのユーティリティ関数は、ハードコード化されたライブラリ名を必要としないコールアウト・アプリケーションを記述する方法を提供します。代わりに、実際のライブラリ・ファイル名は別のインデックス・テーブルに含まれます。ここでは、各ライブラリは一意のユーザ定義インデックス番号に関連付けられています。インデックス・テーブルが定義されると、Caché のインスタンス内のすべてのプロセスで利用可能になります。コールアウト・アプリケーションは、ライブラリをインデックス番号で識別し、インデックス・テーブルを読み取ることによってロードします。複数のライブラリを同時にメモリ内に入れることができます。以下の関数は、インデックスの管理とライブラリのロードまたはアンロードに使用されます。

  • $ZF(-6) は、ライブラリ関数を呼び出し、ライブラリがまだメモリ内に無い場合には、ロードします。

  • $ZF(-4,4) は、ライブラリをアンロードします。

  • $ZF(-4,5) および $ZF(-4,6) は、Caché のインスタンス内のすべてのプロセスでアクセス可能なシステム・インデックス・テーブルを作成および維持するために使用されます。

  • $ZF(-4,7) および $ZF(-4,8) は、単一プロセス内のシステム・インデックスをオーバーライドするために使用できるプロセス・インデックス・テーブルを作成および維持するために使用されます。

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

$ZF() 関数

通常、C 関数コードは、コールアウト・ライブラリの生成に使用されますが、Caché 実行可能ファイルのカスタム・バージョンに直接リンクすることもできます。$ZF() 関数 (負の数の引数なし) は、静的にリンクされたコールアウト関数を呼び出すためのインタフェースです。$ZF(-3)$ZF(-5)、または $ZF(-6) とは異なり、外部ライブラリ識別子を指定する必要はなく、静的にリンクされた関数は関数名および引数を指定するだけで呼び出すことができます。

詳細は、“静的にリンクされたコールアウト関数” を参照してください。

互換性のある言語とコンパイラ

コールアウト・ゲートウェイを使用して、ObjectScript 以外の言語で記述されたルーチンを呼び出すことができます。Caché をサポートするすべてのプラットフォーム上で、C 言語で記述されたルーチンを呼び出すことができます。理論上は、C と互換性がある任意のコンパイル言語で記述されたルーチンを呼び出すことができますが、2 つの互換性の問題が発生します。1 つは、コンパイラは C と互換性があるアプリケーション・バイナリ・インタフェース (ABI) を使用する必要があることです。2 つ目は、コンパイラは Caché と互換性がないランタイム・ライブラリ機能に依存しないコードを生成する必要があることです。

インターシステムズは、すべてのプラットフォーム上で Caché を生成するために使用するのと同じ C コンパイラの使用をサポートします。

プラットフォーム コンパイラ
IBM AIX AIX 用 IBM XL C
Mac OS X (Darwin) Xcode
Microsoft Windows Microsoft Visual Studio
Linux (系列すべて) GNU プロジェクト GCC C

ほとんどのプラットフォームは、標準化されたアプリケーション・バイナリ・インタフェース (ABI) を備え、ほとんどのコンパイラに互換性があります。Intel x86-32 および x86-64 プラットフォームは主な例外であり、これらのプラットフォームには、複数の呼び出し規則が存在します。これらのプラットフォームでの呼び出し規則については、(http://en.wikipedia.org/wiki/X86_calling_conventionsOpens in a new tab) を参照してください。

Microsoft Windows の場合、x86-32 プラットフォームでは cdecl インタフェース、x86-64 では (http://msdn.microsoft.com/ja-jp/library/9b372w95(v=vs.80).aspxOpens in a new tab) で記述されている呼び出し規則を使用します。

多くの C コンパイラでは別の呼び出し規則を使用する外部ルーチンの宣言を許可しているため、異なる呼び出し規則を使用する言語を呼び出すことは可能です。したがって、C ラッパ・ルーチンを記述するのであれば、他の言語で記述されたルーチンを呼び出すことができます。

OpenVMS では、すべてのコンパイラが OpenVMS Calling Standard (http://h71000.www7.hp.com/doc/82final/5973/5973pro.htmlOpens in a new tab) に従っています。

FeedbackOpens in a new tab