COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

19.6.2 DLLに含まれるプログラムの呼び出し方法

DLLに含まれるプログラムの呼び出しには,静的なリンクによる呼び出しと,動的なリンクによる呼び出しの二つの方法があります。

<この項の構成>
(1) 静的なリンク
(2) 動的なリンク
(3) 注意事項
(4) プログラムのデバッグ
(5) 動的なリンクを使用するプログラム作成時の注意事項
(6) 動的なリンクを使用する場合の注意事項

(1) 静的なリンク

呼び出し元プログラムのリンク時にインポートライブラリを指定して,呼び出し先プログラム名を解決する方法です。この場合,実行可能ファイルがロードされるときに,DLLもロードされます。

DLLを静的にリンクするには,呼び出し元プログラムから定数指定のCALL文で,呼び出し先プログラムのDLLを呼び出します。

ロード対象のDLLは次のDLL検索フォルダ下から順に検索されます。

  1. 現在のプロセスの実行可能ファイルがあるフォルダ
  2. Windowsのシステムフォルダ
  3. Windowsフォルダ
  4. カレントフォルダ
  5. 環境変数PATHで登録されているフォルダ

プログラム実行時,これらの検索パスにDLLがないと,プロセス起動エラーとなります。

-DynamicLink,Callオプションを指定していない定数指定のCALL文を実行することで,静的なリンクによって呼び出しを行います。

(例)
副プログラムを含むDLLがCALL '定数'で呼ばれ,実行可能ファイルの作成時にインポートライブラリを指定してDLLをリンクした場合,静的なリンクでの呼び出しとなります。
[図データ]

(2) 動的なリンク

実行時に呼び出し先プログラムを検索する方式です。

DLLを動的にリンクするには,次のどれかの文を実行しDLLに含まれるプログラムを呼び出すか,またはそのアドレスを求めます。

動的なリンクの場合,プログラム実行時に環境変数CBLLDLLで呼び出し先プログラムが含まれるDLLを指定します。

形式
CBLLDLL=DLL名称[;DLL名称]…
DLL名称
動的にリンクするDLLの名称を指定します。

規則
DLL名称の指定方法には,DLLのファイル名称だけを指定する方法と,フォルダを含めたファイル名称を指定する方法があります。
ファイル名称だけを指定した場合,動的なリンクの対象となるDLLは,次のDLL検索フォルダにある指定名称のDLLから順に検索されます。
  1. 現在のプロセスの実行可能ファイルがあるフォルダ
  2. Windowsのシステムフォルダ
  3. Windowsフォルダ
  4. カレントフォルダ
  5. 環境変数PATHで登録されているフォルダ
フォルダを含めたファイル名称を指定した場合,指定したフォルダのDLLだけが動的なリンクの対象となります。

DLL自動ロード機能
DLL自動ロード機能は,環境変数CBLLDLLの指定でプログラムが見つからなかった場合に,プログラム名.dllという名称のDLLをロードして,そのDLL中のプログラムを実行できるようにする機能です。
DLL自動ロード機能で一度ロードすれば,それ以降はDLL中のほかのプログラムをCALL文で呼び出せます。
DLL自動ロード機能を使用するためには,実行時環境変数CBLLPROGDLLにYESを指定します。環境変数の設定方法については,「38.2.1 実行時環境変数の設定方法」を参照してください。

環境変数CBLLDLLで指定したDLLに呼び出し先プログラムがない場合,CALL文で実行時エラーとなります。また,DLL自動ロード機能を使用する場合は,「呼び出し先プログラムの名称.dll」という名称のDLLがないとき,または「呼び出し先プログラムの名称.dll」に呼び出し先プログラムが含まれないときも,CALL文で実行時エラーとなります。

なお,動的なリンクのプレロード機能を使用することで,プログラム起動時に検索対象となるDLLをロードできます。動的なリンクのプレロード機能の詳細は,「19.6.3 動的なリンクのプレロード機能」を参照してください。

(例)
一意名指定のCALL文での呼び出しの場合は,動的なリンクでの呼び出しとなります。
[図データ]

注意事項
  • 環境変数の値は,プログラムで最初に呼ばれたCALL文の実行時に取得した値が,そのプログラム中で有効になります。

(3) 注意事項

(4) プログラムのデバッグ

実行可能ファイルに静的にリンクしたCOBOLプログラムと同様に,動的にリンクしたDLLについてもテストデバッガを使用したデバッグができます。

(5) 動的なリンクを使用するプログラム作成時の注意事項

プログラムの作成時には次のような注意が必要になります。

プログラムの作成方法については,「37. 実行可能ファイルとDLLの作成」を参照してください。

(6) 動的なリンクを使用する場合の注意事項

ダイナミックリンクでは,独自にDLLのロードやアンロードを管理しています。そのため,プログラムの実行中に,DLLのロードやアンロードに関連するシステム関数を,ユーザプログラムから呼び出してはなりません。

注※
DLLのロードやアンロードに関連するシステム関数は,次のとおりです。
LoadLibrary,FreeLibrary