dllload() - ダイナミック・リンク・ライブラリーのロードとアプリケーションへの DLL の接続

標準

標準/拡張機能 C/C++ 依存項目
C ライブラリー 両方  

形式

#include <dll.h>

dllhandle *dllload(const char *dllName);

機能説明

注: この関数は推奨できません。代わりに dlopen() を使用してください。

ダイナミック・リンク・ライブラリー (DLL) をメモリーに ロードし (事前にロードされていない場合)、その DLL を アプリケーションに接続します。DLL を呼び出した関数は、その DLL へのその後の明示的要求 のために要求される DLL を固有に識別するハンドルを 受け取ります。

dllload() の呼び出しが正常終了するたびに、異なるハンドルが戻されます。dllload() が何度も呼び出される場合でも、DLL は、物理的に 1 回ロード されるだけです。C++ コンストラクター は 1 回だけ実行されます。

dllName は、ロードされる DLL ロード・モジュール を識別します。これは NULL 文字で終了する文字ストリングにしなければ なりません。DLL モジュールは、PDS のメンバーであるか、その別名で なければなりません。

注: アプリケーション の AMODE は、DLL ロード・モジュールの AMODE と同じくしなければなりません。

この関数は、SPC、MTF、および CSP 環境では 使用できません。

dllName は、ロードされる DLL ロード を識別します。これは NULL 文字で終了する文字ストリングにしなければ なりません。DLL モジュールは、PDS のメンバーであるか、その別名で なければなりません。

file 引数に単一スラッシュ (「/」) が入っている場合、それは、DLL 用の z/OS® UNIX ファイル・システム・パス名として使用されます。 環境変数 LIBPATH が設定されている場合、DLL は、リストされた各ディレクトリー で検索されます。 それ以外の場合、現行ディレクトリーが検索されます。

注: z/OS UNIX ファイル・システムでの DLL の検索は、大/小文字の区別がありま す。

file 引数が 2 つのスラッシュ (「//」) で始まっている場合、呼び出し元の MVS™ ロード・ライブラリー検索順 (STEPLIB/JOBLIB、LPA、リンク・リストの順) で DLL をロードしようとします。 DLL 名は 8 文字以下でなければならず、大文字に変換されます。 修飾子つきの DLL 名はサポートされず、MVS ロード・ライブラリーの検索順序が使用されます (例えば、STEPLIB を更新または使用して、検索に含まれる修飾子の数を指定する)。

file 引数が 1 つまたは 2 つのスラッシュ (「/」または「//」) か ら始まっておらず、名前のどこにも単一スラッシュ (「/」) が含まれていない場合、DLL がどこにあるかはあいまいです。
  • POSIX(ON) ランタイム・オプションが指定されていると、DLL は最初に z/OS UNIX ファイル・システムで検索されて、そこで見つからないと、MVS ロード・ライブラリーが検索さ れます。
  • POSIX(OFF) ランタイム・オプションが指定されていると、DLL は最初に MVS ロ ード・ライブラリーで検索されて、そこで見つからないと、z/OS UNIX ファイル・シ ステムが検索されます。

CICS® 環境では、DLL ロード・モジュールの検索シーケンスは、動的にロードされた CICS モジュールに使用される 検索シーケンスと同じです。z/OS UNIX ファイル・システムからの DLL のロードは、CICS ではサポー トされません。

DLL のロード方法および検索シーケンスの使用方法について詳しくは、「z/OS Language Environment プログラミング・ガイド」の『』に関するトピックを参照してください。

戻り値

正常に終了した場合、dllload() は、DLL を識別する固有のハンドルを戻します。

正常に実行されなかった場合、dllload() は NULL を戻して、errno を次のいずれかの 値に設定することがあります。

エラー・コード
説明
ELEFENCE
DLL は、オペレーティング・システムのこのバージョンではサポートされないメンバー言語を含んでいます。
ENOEXEC
新規プロセス・イメージ・ファイルに適切なアクセス許可は ありますが、形式が適切ではありません。
注: さらに、理由コードが errno に加わります。 理由コードについては、「z/OS UNIX System Services メッセージおよびコード」を参照してください。
ENOEXEC の場合、該当する理由コードは以下のとおりです。
理由コード 説明
X'xxxx0C27' ターゲットの z/OS UNIX ファイル・システムのファイルのフォーマッ トが正しくないため、実行可能ファイルになりません。
X'xxxx0C31' ターゲットの z/OS UNIX ファイルは、実行システム でサポートされているレベルより高いレベルで作成されています。

使用上の注意

  1. 詳細な診断情報は、_EDC_DLL_DIAG 環境変数、 および Language Environment® DLL 障害制御ブロック (CEEDLLF) チェーンを使って 入手できます。

CELEBDL1
⁄* CELEBDL1

   The following example shows how to invoke dllload() functions
   from a simple C application.

 *⁄
#include <stdio.h>
#include <dll.h>

main() {
    dllhandle *handle;
    char *name="stream";

    handle = dllload(name);
    if (handle == NULL) {
       perror("failed on dllload of stream DLL");
       exit(-1);
    }
}

関連情報