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キー等で実行する。