技術情報 - Net Express - 2.3 Visual BASICからCOBOLロジックを利用する

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

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

Visual BASIC と COBOLアプリケーションのリンク

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

参照するデモプログラム(Visual Basicのファイル):

MFVBDEMO.BAS
MFVBDEMO.FRM

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のコードファイル)MFVBDEMO.BAS
(COBOLのDLLのソースファイル)MFDLL.CBL

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
MFVBDEMO.VBP(プロジェクトファイル)
MFVBDEMO.BAS(コードファイル)
ABOUT.FRM(フォームファイル)
MFVBDEMO.FRM(フォームファイル)
MFVBDEMO.EXE(実行ファイル)
COBOLのDLL
MFDLL.CBL(ソースファイル)
SETUPDLL.BAT(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キー等で実行する。

戻る

-----