Rational Developer for System z
COBOL for Windows バージョン 7.5 プログラミング・ガイド


例: DLL ソース・ファイルおよび関連ファイル

次の 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

実行時の DLL 参照の解決

次の 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 環境変数で定義されるディレクトリー内になければなりません。

リンク時の DLL 参照の解決

次のプログラムは 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 のコンパイルおよびリンク

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

ご利用条件 | フィードバック

Copyright IBM Corporation 1996, 2008.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)