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?

静的にリンクされたコールアウト関数

このドキュメント内の前の章では、実行時にロードできるスタンドアロン・コールアウト・ライブラリを作成する方法を説明しました。ただし、コールアウト関数をカスタム・バージョンの Caché に静的にリンクして常に利用できるようにすることもできます。関数が Caché にリンクされているため、関数を呼び出すときにコールアウト・ライブラリを明示的にロードしたり、ライブラリを指定する必要はありません。

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

静的にリンクされたコールアウト関数の呼び出し

静的にリンクされたコールアウト関数の呼び出し規則は、動的ライブラリの規則と異なります。以下はその例です。

   $ZF(-3,"mylibrary","MYFUNC",args...)

上記は以下のようになります。

   $ZF("MYFUNC",args...)

関数が静的にリンクされているため、サブ関数番号およびライブラリ名 (この例の、-3,"mylibrary" など) を指定する必要はありません。

Windows でのカスタム CACHE.EXE ファイルの作成

#define ZF_DLL 指示文を含まないという点を除いてコールアウト・ライブラリのコードと同一のコードを含む mycallouts.c という名前のファイルがあることを前提とします (“InterSystems コールアウト・ライブラリの作成” を参照してください)。これをコンパイルおよびリンクする手順は、以下のとおりです。

外部関数のコンパイルまたはアセンブル

Windows で mycallouts.c をコンパイルするには、以下のコマンドを使用します。

cl -c mycallouts.c

これにより、Caché にリンク可能な mycallouts.obj という出力ファイルを生成します。

オブジェクト・ファイルと Caché オブジェクト・ファイルを、新しいバージョンの Caché にリンクします。

以下の方法で、$ZF で使用する C 関数をリンクします。

  1. <install-dir>/Dev/Cache/callin ディレクトリ ( <install-dir> はユーザの構成のルート・ディレクトリ) で構築を実行するか、必要なファイルのコピーを使ってプライベート・ディレクトリを作成します。以下のファイルをリンクします。

    • cache.obj

    • main.obj

    • shdir.obj

    プライベート・ディレクトリで mycallouts.c をコンパイルし、生成された mycallouts.obj ファイルにこれらのファイルをリンクします。

  2. czf.obj ファイルを mycallouts.obj に置き換えます。

  3. プロジェクトを構築します。これにより、プライベート・ディレクトリに cache.exe ファイルを生成します。別々のファイルに C 関数を配置している場合、それらを別々にコンパイルし、mycallouts.c で宣言する必要があります。しかし、そこには組み込みません。“Unresolved externals...” というメッセージが表示された場合、他のライブラリを組み込む必要があります。組み込むファイルについてサポートが必要な場合、インターシステムズのサポート窓口までお問い合わせください。

  4. <install-dir>/bin ( <install-dir> はユーザの構成のルート・ディレクトリ) に現在インストールされている cache.exe を保存します。これにより、そのファイルをリストアできます。

Caché をシャットダウンし、Caché の実行可能ファイルを新しいファイルに置き換えます。

以下の方法で、Caché を Windows に再インストールします。

  1. キューブ・メニューの [Caché の停止] を使用して、Caché を停止します。

  2. cache.exe ファイルをプライベート・ディレクトリから <install-dir>/binにコピーします。 <install-dir> は、ユーザの構成のルート・ディレクトリです。

Caché を再起動すると、関数が使用可能になります。

Caché の再起動

Windows では、Caché キューブから Caché を開始します。

現在の Caché バージョンは C 関数を組み込んでいます。

以下の方法で、(Windows 上の) Caché の管理者ディレクトリにある Caché をオリジナル・バージョンに戻します。

  1. Caché をシャットダウンします。

  2. cache.exe ファイルをプライベート・ディレクトリから <install-dir>/binにコピーします。 <install-dir> は、ユーザの構成のルート・ディレクトリです。

UNIX®、Linux、または OS-X でのカスタム CACHE.EXE ファイルの作成

#define ZF_DLL 指示文を含まないという点を除いてコールアウト・ライブラリのコードと同一のコードを含む mycallouts.c という名前のファイルがあることを前提とします (“InterSystems コールアウト・ライブラリの作成” を参照してください)。これをコンパイルおよびリンクする手順は、以下のとおりです。

外部関数のコンパイルまたはアセンブル

mycallouts.c をコンパイルするには、以下のコマンドを使用します。

cc -c mycallouts.c
オブジェクト・ファイルと Caché オブジェクト・ファイルを、新しいバージョンの Caché にリンクします。

以下の方法で、$ZF で使用する C 関数をリンクします。

  1. <install-dir>/dev/cache/callin/samples ディレクトリで構築を実行するか、必要なファイルのコピーでプライベート・ディレクトリを作成するかのいずれかを実行します。以下のファイルをリンクします。

    • cache.o (Caché 配布キットで提供されています)

    • main.o (Caché 配布キットで提供されています)

    • shdir.o (shdir.c を手動でコンパイルする必要があります)

    • mycallouts.o (プライベート・ネームスペースに作成されます)

  2. プロジェクトを構築します。“Unresolved externals” メッセージを受け取った場合、他のライブラリを組み込む必要があります。組み込むファイルがわからない場合、インターシステムズのサポート窓口までお問い合わせください。別々のファイルに C 関数を置く場合、それらを別々にコンパイルし、mycallouts.c で宣言する必要があります。しかし、そこには組み込みません。

  3. /cachesys/bin/ に (あるいは任意の場所のインストール・ディレクトリに) Caché のバージョンを保存します。これにより、必要に応じて Caché をリストアできます。

Caché をシャットダウンし、Caché の実行可能ファイルを新しいファイルに置き換えます。

Caché 実行可能プログラムを置換するには、以下の手順に従います。

  1. 以下を実行し、Caché をシャットダウンします。

    ccontrol stop <configname>
    

    <configname> は、Caché のインストール名です。

  2. cache ファイルをプライベート・ディレクトリから <install-dir>/bin/にコピーします。 <install-dir> は、ユーザの構成のルート・ディレクトリです。

Caché の再起動

cstart スクリプトを使用して、または以下を呼び出して Caché を開始します。

ccontrol start <configname>

<configname> は、起動したい Caché のインストール名です。

以下の方法で、Caché システム管理者のディレクトリにある Caché をオリジナル・バージョンに戻します。

  1. Caché をシャットダウンします。

  2. cache ファイルをプライベート・ディレクトリから <install-dir>/binにコピーします。 <install-dir> は、ユーザの構成のルート・ディレクトリです。

OpenVMS でのカスタム CZF.EXE ファイルの作成

既定では、OpenVMS 用の Caché は、既にいくつかのコールアウト関数を含む CZF.EXE という名前のイメージを含みます (標準 CZF.EXE 関数の説明は、“DSM に代わる $ZF 関数呼び出し” を参照してください)。

OpenVMS 下では (この章で説明しているその他のオペレーティング・システムとは異なり)、コールアウト・ライブラリはカスタム・バージョンの cache.exe に静的にリンクされません。代わりに、標準バージョンの CZF.EXE をカスタム・バージョンと置き換えます (“InterSystems コールアウト・ライブラリの作成 ” を参照してください)。標準バージョンのソース・コードは、カスタム・バージョンがそれを含めることができるように提供されています。

CZF.C のコンパイル

外部関数と Caché にリンクする CZF.OBJ ファイルを準備するには、DCL プロンプトから以下のコマンドを発行することによって CZF.C をコンパイルします。

$ CC CZF.C

Note:
OpenVMS のみ: CZF.M64 のアセンブル

CZF.M64 ファイルを使用している場合は、この時点でアセンブルして (“CZF.M64 の使用” を参照) CZF.OBJ を作成します。

オブジェクト・ファイルのリンクによる CZF.EXE の作成

CZFBUILD.com ファイルを使用して、外部関数にリンクします。CZFBUILD.com を編集し、リンクするファイルを追加します。編集前の CZFBUILD.com は以下のようになります。

LINK/NOTRACE/MAP=CZF/SHAREABLE=CZF SYS$INPUT:/OPTIONS
        CLUSTER=CZF,,,CZF
        GSMATCH=ALWAYS,0,0
        SYMBOL_VECTOR=(ZFE=DATA)

  1. CZFBUILD.COM を編集し、CZF.OBJ と各外部オブジェクト・ファイルを組み込みます。CZF ファイルで定義した外部関数を含む各ファイル名を、CZFBUILD.COM の 2 行目に追加します。例えば、関数が abc.objxyz.obj という 2 つのファイルにある場合、編集後の 2 行目は以下のようになります。

    CLUSTER=CZF,,,CZF,ABC,XYZ
    
  2. DCL プロンプトで CZFBUILD.COM を実行します。これにより、CZF.EXE ファイルを生成します。

Note:

コードが #include "callin.h" を実行し、Caché にコールバックする場合、Caché 共有可能イメージにもリンクする必要があります。

  • Alpha システムでは、CACHE /sharable を使用します。

  • Itanium システムでは、CKERNEL /sharable を使用します。

コマンドは、コマンド行ではなく、オプション・ファイル内で発行する必要があります。

Caché のシャットダウンと CZF.EXE のインストール

以下のコマンドを発行します。

CCONTROL STOP <configname>

<configname> は、シャットダウンしたい Caché のインストール名です。

Caché 実行可能プログラムを共有メモリからアンロードし、CZF.EXE を置き換える必要があります。以下はそのコードです。

CCONTROL UNLOAD <configname>

<configname> は、アンロードしたい Caché のインストール名です。

プライベート・ディレクトリから <install-dir>:[bin] サブディレクトリに CZF.EXE をコピーします。以下はそのコードです。

COPY CZF.EXE DKA0:[CACHESYS.BIN]
Caché の再起動

Caché を再起動するには、以下のコマンドを発行します。

CCONTROL START <configname>

<configname> は、起動したい Caché のインストール名です。

FeedbackOpens in a new tab