Net Express 技術情報(FAQ)


Visual BASIC から COBOL ロジックを利用する方法を教えてください

Microsoft Visual BASIC と NetExpressを組み合わせて使用することによって、完全に Windowsスタイルのフロントエンドを持ちながら、COBOLの持つビジネスロジックの記述力を活かしたアプリケーションを作成することができます。

Visual BASIC で作成したGUIパネルから、DLL化された COBOLサブルーチンをバックグラウンドでCALLして、複雑なデータ処理を引き渡すことができます。


1)Visual BASIC から COBOLサブルーチンの呼び出し

参照するデモプログラム:


Visual BASIC からCOBOLサブルーチンを呼び出すには、Visual BASIC プログラムの Global Declarations においてサブルーチンを宣言しなければなりません。例えば、COB.DLL という DLL に含まれるエントリ "COBSUB" を呼び出すためには、GLOBAL.BAS 中に以下の宣言を記述します :

Declare Sub COBSUB Lib "COB.DLL"

Visual BASIC の手続きから COBSUB をCALLするには以下のように記述します:

 COBSUB



2)パラメタとして使用する変数の宣言

参照するデモプログラム:


Visual BASIC からCOBOLサブルーチンを呼び出す際にパラメタを渡すことができます。パラメタは参照用として渡されますので、COBOLサブルーチン中でパラネタの項目を更新すると、Visual BASICに戻ったときに更新は有効となります。

パラメタを渡すには、Visual BASIC側と COBOL側とで同等なデータ型の宣言をする必要があります。双方の言語でデータ型の宣言方法は異なりその整合性をチェックする手段はありません。エラーがあればプログラムの実行時の不正動作となります。

以下に、双方の言語でのデータ型の宣言の対応を示します:

データ型            Visual BASIC 宣言         COBOL 宣言
整数型              Dim X As Integer          PIC S9(4) COMP-5 
Long整数型          Dim X As Long             PIC S9(9) COMP-5 
整数型の配列(3要素)   Dim X (1 to 3) As Integer PIC S9(4) COMP-5 OCCURS 3 TIMES 
単精度浮動小数点      Dim X As Single           COMP-1 
倍精度浮動小数点      Dim X As Double           COMP-2 

文字列型とレコード型の変数は、Visual BASIC側ではユーザー定義型として宣言します。以下に例を示します:


35文字の文字列型

Visual BASIC の宣言:
      Type StringType
        String35 as String*35
      EndType
      Dim X As StringType

は、COBOLの宣言:

      01  X  PIC X(35).

に相当します。

レコード型

Visual BASIC の宣言:

      Type MemberType
        Name As String*30
        Account As Integer
      End Type
      Dim Member As MemberType

は、COBOLの宣言:

      01  MEMBER.
          03  NAME            PIC X(30).
          03  ACCOUNT         PIC 9(4) COMP-5.

に相当します。

パラメタ変数の渡し方

Visual BASIC から COBOL にパラメタを渡すには、サブルーチンの宣言の中でパラメタも宣言する必要があります。以下に例を示します:
Visual BASIC の宣言

      Declare Sub COBSUB Lib "COB.DLL" (X As Integer)

Visual BASIC の手続き

      COBSUB  X

対応するCOBSUBのエントリポイントは以下のように記述します:

      ENTRY "COBSUB" USING WS-X.




3)Visual Basicのユーザー定義型の構造体 - Doublewordアライメントについて

Visual Basic 4.0、32bitでは定義するユーザー定義型の構造体にはDoublewordアライメントが採用されています。つまり4バイトで位置合わせする仕様になっています。 (VB32.EXEがインストールされたディレクトリにあるVB4DLL.TXTご参照。)

DLL呼び出し時の引数として使うVisual Basicのユーザー定義型の構造体の部分を、COBOLのLINKAGE SECTIONの中で定義するときは、Visual Basicで埋め込まれるこの4バイト境界を、FILLERで位置合わせする必要があります。

例:左下のようにVisual Basic側で定義した場合。

Visual Basicのユーザー定義型の構造体

   Type COBOLInterface
       String_40 As String * 40
       Integer As Integer
       String_40A As String * 40
       Long As Long
       String_40B As String * 40
       single As Single
       String_40C As String * 40
       double As Double
       String_40D As String * 40
       String_40_out As String * 40
       Integer_out As Integer
       String_40A_out As String * 40
       Long_out As Long
       String_40B_out As String * 40
       single_out As Single
       String_40C_out As String * 40
       double_out As Double
       String_40D_out As String * 40
       message_out As String * 50
   End Type

COBOLのLINKAGE SECTIONの定義

      01 VB-TO-COBOL-LINK.
         03 INPUT-GROUP.
           05 VB-STRING                   PIC X(40).
     *  S9(4) COMP-5は2バイト
           05 VB-INTEGER                  PIC S9(4) COMP-5.
           05 TEST-STRING-1               PIC X(40).
     * 以下のfillerはVisual Basicで使用される4バイト境界のためです。
           05 filler                      pic xx.
     *  S9(9) COMP-5は4バイト
           05 VB-LONG                     PIC S9(9) COMP-5.
           05 TEST-STRING-2               PIC X(40).
     * COMP-1は4バイト 
           05 VB-SINGLE                   COMP-1.
           05 TEST-STRING-3               PIC X(40).
     * COMP-2は8バイト 
           05 VB-DOUBLE                   COMP-2.
           05 TEST-STRING-4               PIC X(40).
         03 OUTPUT-GROUP.
           05 VB-STRING-OUT               PIC X(40).
           05 VB-INTEGER-OUT              PIC S9(4) COMP-5.
           05 filler                      pic xx.
           05 TEST-STRING-1-OUT           PIC X(40).
           05 VB-LONG-OUT                 PIC S9(9) COMP-5.
           05 TEST-STRING-2-OUT           PIC X(40).
           05 VB-SINGLE-OUT               COMP-1.
           05 TEST-STRING-3-OUT           PIC X(40).
           05 VB-DOUBLE-OUT               COMP-2.
           05 TEST-STRING-4-OUT           PIC X(40).
         03 MESSAGE-FROM-JIM              PIC X(50).



4)その他の注意事項

1) 浮動小数点型のパラメータを使用する場合には、COBOLのDLLを作成する時は、浮動小数点サポートモジュール COBINTFN.OBJ をリンクして下さい。
2) COBOL DLL中でオープンされたファイルは、Visual BASIC に戻る前にクローズしなければなりません。COBOL DLLから更に呼び出された他の DLLや、動的に割り当てられたメモリなども、Visual BASIC に戻る前に解放しなければなりません。
3) COBOL DLL は ACCEPT/DISPLAY文を実行することはできません。


5)デモプログラム

Visual BASIC



COBOLのDLL



実行手順 注意:COBOL開発環境のあることが前提です。

1) コマンドプロンプトを起動する。
2) 以下のようにSETUPDLL.BATを使って、COBOLのDLLを作る。

setupdll mfdll

3) MFDLL.DLLがカレントディレクトリにあることを確認してから、以下のコマンドでVisual BasicのEXEを起動する。

mfvbdemo


Visual Basicのメニューから実行する場合 1) 上記の2)の通りにMFDLL.DLLを作る。
2) Visual Basicを起動する。
3) MFVBDEMOのプロジェクトファイルを開く。
4) MFVBDEMO.BASのコードを開き、COBOLのDLLの正しいパスを指定して保存する。

例 c:\demo\VB\MFDLL.dllが正しいパスの場合:
   Declare Sub MFDLL Lib "c:\demo\VB\MFDLL.dll" ()
   Declare Sub REALWORK Lib "c:\demo\VB\MFDLL.dll" (CallInterface As COBOLInterface)

5) Visual BasicのメニューからF5キー等で実行する。