COBOL2002 ユーザーズガイド
DLL(ダイナミックリンクライブラリ)とは,副プログラムだけで構成され,実行可能ファイル中のプログラムから呼ばれることで実行できるファイルのことです。ここでは,拡張子が(.dll)のファイルをDLLと呼びます。
DLLを作成する方法は,実行可能ファイルの生成と同じです。ここでは,DLLの作成方法のうち,実行可能ファイルの生成と異なる部分について説明します。
なお,64bit版PC(x64) COBOL2002の場合は「-Dll,Stdcall」と「Dll,Cdecl」を「-Dll」に読み替えてください。
- <この項の構成>
- (1) DLLを作成する
- (2) 呼び出し時にDLLを初期化する
- (3) 注意事項
(1) DLLを作成する
ccbl2002コマンドでCOBOLプログラムからDLLを作成する場合は,-Dll,Stdcallまたは-Dll,Cdeclオプションを指定します。コンパイルとリンクを別々にccbl2002コマンドでする場合は,コンパイル時,リンク時共に-Dll,Stdcallまたは-Dll,Cdeclオプションを指定します。
次に,DLLを作成する例を示します。
- ソースファイル名称:TEST02.CBL
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST02.
PROCEDURE DIVISION.
DISPLAY '--- TEST02 START ---'.
DISPLAY '--- TEST02 END ---'.
- ccbl2002コマンドの指定
- COBOLプログラム"test02.cbl"と-Dll,Stdcallまたは-Dll,Cdeclオプションを指定し,-OutputFileオプションにDLL名称"test02.dll"を指定します。
ccbl2002 -Dll,Stdcall test02.cbl -OutputFile test02.dll
- 上記のコマンドを実行すると,DLLファイル"test02.dll"が生成されます。
- 注意事項
- 見出し部にINITIAL句がないプログラムに対して-Dll,Stdcallまたは-Dll,Cdeclオプションだけを指定した場合,生成されるDLLは,初期化属性を持ちません。このため,DLLが繰り返し呼び出されても,次の情報が初期状態に戻されないで,前の状態を保持します。
- (情報が保持される項目)
- プログラムに関連するファイルや報告書の状態・画面節(SCREEN SECTION),画面節(WINDOW SECTION),通信節,サブスキーマ節で使用された資源の状態
- 作業場所節,報告書節,画面節(SCREEN SECTION),画面節(WINDOW SECTION),ファイル節,サブスキーマ節,通信節の内容
- PERFORM文に対する制御機構
- ALTER文で設定したGO TO文
- -Dll,Stdcallまたは-Dll,Cdeclオプションを指定してコンパイルするプログラム中でEXTERNAL句を使用する場合,DYNAMIC指定のEXTERNAL句だけが使用できます。
(2) 呼び出し時にDLLを初期化する
ccbl2002コマンドに,-Dll,Stdcallまたは-Dll,Cdeclオプションと合わせて,-DllInitオプションを指定すると,生成されたDLLは初期化属性プログラムとなり,そのDLLが呼び出されるたびに,次の情報が初期状態に戻されます。
初期化属性のプログラムの詳細については,「19.4.1 プログラム属性」を参照してください。
- LINKコマンドを使用してDLLファイルを作成する場合,DLLファイルにLINKコマンドが生成したマニフェストファイルを埋め込む必要があります。
詳細は,「37.1.2 コンパイルとリンクを別々に実行する方法」の「(2) LINKコマンドによるリンク方法」を参照してください。
- 32bit版PC(x86) COBOL2002の場合,STDCALL呼び出し規約のCプログラムを動的なリンクで呼び出したいときは,プログラム名は装飾名を付けてエクスポートする必要があります。エクスポートには次の方法があります。
- LINKコマンドの/DEFオプションにモジュール定義ファイル(defファイル)を指定する
- LINKコマンドの/EXPORTオプションを指定する
- Cソースファイル内でエクスポートすることを明示する
STDCALL呼び出し規約のプログラム名の装飾やプログラムのエクスポートについては,MSDN(Microsoft Developer Network)などのドキュメントを参照してください。なお,COBOLプログラムの場合,COBOLコンパイラがプログラム名でエクスポートするため,リンク時に明示する必要はありません。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.