次の COBOL ソース・コードは、DLL ソース・サブプログラムの単純な例です。 コンパイル時には、DLL に多数の最外部プログラムを含めることができます。各プログラムは、DLL 内のサブプログラムと見なされます。
次の例では、DLL にサブプログラムが 1 つしか含まれていません。MYDLL.DLL という名前の DLL に含まれる、MYDLL という名前のサブプログラムを別のプログラムが呼び出し、このサブプログラムが実行されると、コンピューター画面に MYDLL Entered というテキストが表示されます。
IDENTIFICATION DIVISION.
PROGRAM-ID. MYDLL.
PROCEDURE DIVISION.
DISPLAY “MYDLL Entered”.
EXIT PROGRAM.
コンパイル済みの MYDLL.CBL ソース・プログラムの .DEF ファイルは、DLL を構築するモジュール定義ファイルで特に頻繁に使用されるステートメントを示しています。
;*********************************************** ;* MYDLL.DEF * ;* Description: Provides the module definition * ;* for MYDLL.DLL, a simple COBOL DLL * ;*********************************************** LIBRARY MYDLL INITINSTANCE TERMINSTANCE PROTMODE DATA MULTIPLE READWRITE LOADONCALL NONSHARED CODE LOADONCALL EXECUTEREAD EXPORTS MYDLL
次の COBOL ソース・プログラムは、MYDLL.DLL 内の MYDLL を呼び出します。
IDENTIFICATION DIVISION.
PROGRAM-ID. RTDLLRES.
*
* THIS PROGRAM USES CALL identifier to call a subprogram
* NAMED MYDLL in a DLL. IT REQUIRES A DLL
* NAMED MYDLL.DLL.
*
*
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CALLNAM PIC IS X(8).
PROCEDURE DIVISION.
DISPLAY “Start sample program RTDLLRES”.
MOVE “MYDLL” TO CALLNAM.
CALL CALLNAM.
DISPLAY “RTDLLRES successful”.
STOP RUN.
この例では、次のステートメントが、MYDLL.DLL という DLL の単一サブプログラム MYDLL を指す参照となります。
MOVE “MYDLL” TO CALLNAM.
この DLL は、COBPATH 環境変数で定義されるディレクトリー内になければなりません。
次のプログラムは RTDLLRES.CBL と同じですが、ユーザー定義語に対してではなく、.DEF ファイルにエクスポートされたシンボルに対して直接呼び出しが行われる点が異なります。
IDENTIFICATION DIVISION.
PROGRAM-ID. LTDLLRES.
*
* THIS PROGRAM CALLS A SUBPROGRAM CALLED MYDLL WHICH
* RESOLVES AT LINK-TIME. THE DLL IN WHICH “MYDLL”
* IS FOUND IS NOT REQUIRED TO BE NAMED MYDLL.DLL
*
PROCEDURE DIVISION.
DISPLAY “Start sample program LTDLLRES”.
CALL “MYDLL”
DISPLAY “LTDLLRES successful”.
STOP RUN.
この例にある MYDLL への呼び出しは、MYDLL.DLL に対する直接参照ではありません (ただしこの場合は、DLL が偶然同じ名前になっています)。この呼び出しは、MYDLL.DEF ファイルにエクスポートされたシンボル名 MYDLL に対するものです。MYDLL は、MYDLL.DLL 内の唯一の COBOL サブプログラムの名前でもあります。cob2 を使用して LTDLLRES が構築される際には、リンカーが MYDLL.DLL 内の MYDLL に対する呼び出しを解決します。
DLL とメインの実行可能プログラムをコンパイルおよびリンクするには、cob2 を使用します。 DLL とそれを呼び出すプログラムは、別々のステップでコンパイルする必要があります。
次の cob2 コマンドのどちらを使用しても、MYDLL.DLL という名前の DLL が構築されます。
cob2 mydll.cbl mydll.def cob2 mydll.cbl -dll:mydll
次の cob2 コマンドは、プログラム RTDLLRES.EXE を構築します。このプログラムは、実行時の解決によって DLL サブプログラム MYDLL を呼び出します。
cob2 rtdllres.cbl
次の cob2 コマンドは、プログラム LTDLLRES.EXE を構築します。このプログラムは、リンク時の解決によって DLL サブプログラム MYDLL を呼び出します。
cob2 ltdllres.cbl mydll.lib