COBOLで作成したプログラムから、PowerCOBOLで作成したDLLを利用するには、以下の2つの方法があります。
POWEROPENFORMユーティリティを使用する方法
PowerCOBOLのフォームをオートメーションサーバとして利用する方法
POWEROPENFORMユーティリティを使用する
PowerCOBOLでは、COBOLのプログラムからPowerCOBOLで作成したフォームを開くために、以下の3つのサブルーチンを用意しています。
POWEROPENFORMは、ランタイムコードセットがシフトJISコードで作成されたフォームを開く場合に使用します。また、POWEROPENFORMUXとPOWEROPENFORMUNは、ランタイムコードセットがUnicodeで作成されたフォームを開く場合に使用します。ランタイムコードセットの設定方法については、「5.1.3 Unicodeを利用する」を参照してください。
POWEROPENFORMUXとPOWEROPENFORMUNは、フォームを含むDLL(モジュール)の格納フォルダ名が日本語を含むかどうかによって、使い分けます。
これらのサブルーチンを総称して、POWEROPENFORMユーティリティと呼びます。
このユーティリティは、PowerCOBOLのインストールフォルダにある"F5DDFCB4.DLL"がもっています。したがって、POWEROPENFORMユーティリティを利用するには、このDLLに対応するインポートライブラリ"F5DDFCB4.LIB"を、呼び出し元となるCOBOLのモジュールにインポート結合しておく必要があります。
POWEROPENFORMユーティリティを使ってフォームを開くと、フォームが閉じられるまでCOBOLの実行を中断することができます。つまり、PowerCOBOL上でCallFormメソッドを使ってフォームを開いた場合と同様の動作になります。
注意
実行時には、開こうとするフォームが含まれるPowerCOBOLで作成したDLLファイルが必要です。POWEROPENFORMユーティリティの引数で指定したDLL名が、フルパスで指定されていない場合、以下の順序でDLLファイルを検索します。
COBOLで作成した呼び出し元の実行可能プログラムが起動またはロードされたフォルダ
カレントフォルダ
Windowsのシステムフォルダ
Windowsがインストールされているフォルダ
PATH環境変数で指定されているフォルダ
POWEROPENFORMユーティリティは、COBOLのソースプログラムを翻訳およびリンクして作成したアプリケーションから、PowerCOBOLで作成したフォームを開く場合に使用してください。PowerCOBOLで開発するアプリケーションの手続きからフォームを開く場合は、POWEROPENFORMは使用できません。CallFormメソッドおよびDoModalメソッドを使用してください。
また、COBOL以外の言語で作成したプログラムから呼び出すこともできません。
POWEROPENFORM
POWEROPENFORMは、ランタイムコードセットがシフトJISコードで作成されたフォームを開く場合に使用します。
POWEROPENFORMを呼び出すCOBOLプログラムは、RCS(SJIS)オプションを指定して翻訳する必要があります。
CALL ”POWEROPENFORM” USING DLL名 フォーム名
PIC X(260).
開こうとしているフォームをもつDLL名前です。領域の大きさは、260でなければなりません。
設定できる文字列は、英数字で260文字以下、日本語で130文字以下です。
PIC X(14).
開こうとしている子フォームの名前です。領域の大きさは、14でなければなりません。
設定できる文字列は、英数字で14文字以下、日本語で7文字以下です。
正常に終了した場合は0が設定されます。エラーが発生した場合には0以外の値が設定されます。
たとえば、PowerCOBOLで作成したSubA.DLL内のSubFormという名前のフォームを開く場合、以下のように記述します。
DATA DIVISION. WORKING-STORAGE SECTION. 01 DLL名 PIC X(260) VALUE "SubA.DLL". 01 フォーム名 PIC X(14) VALUE "SubForm". PROCEDURE DIVISION. … CALL "POWEROPENFORM" USING DLL名 フォーム名
POWEROPENFORMUX
POWEROPENFORMUXは、ランタイムコードセットがUnicodeで作成されたフォームを開く場合に使用します。
また、フォームを含むDLLの格納フォルダ名が日本語を含まない場合に使用します。POWEROPENFORMUXを呼び出すCOBOLプログラムは、RCS(UTF16,LE) オプションまたはRCS(UTF16,BE)オプションを指定して翻訳する必要があります。
CALL ”POWEROPENFORMUX” USING DLL名 フォーム名
PIC X(390).
開こうとしているフォームをもつDLLの名前です。領域の大きさは、390でなければなりません。
設定できる文字列は、英数字で260文字以下です。
PIC X(21).
開こうとしている子フォームの名前です。領域の大きさは、21でなければなりません。
設定できる文字列は、英数字で14文字以下です。
正常に終了した場合は0が設定されます。エラーが発生した場合には0以外の値が設定されます。
たとえば、PowerCOBOLで作成したSubU.DLL内のSubFormという名前のフォームを開く場合、以下のように記述します。
DATA DIVISION. WORKING-STORAGE SECTION. 01 DLL名 PIC X(390) VALUE "SubU.DLL". 01 フォーム名 PIC X(21) VALUE "SubForm". PROCEDURE DIVISION. … CALL "POWEROPENFORMUX" USING DLL名 フォーム名
POWEROPENFORMUN
POWEROPENFORMUNは、ランタイムコードセットがUnicodeで作成されたフォームを開く場合に使用します。
また、フォームを含むDLLの格納フォルダ名が日本語を含む場合に使用します。POWEROPENFORMUNを呼び出すCOBOLプログラムは、RCS(UTF16,LE) オプションまたはRCS(UTF16,BE)オプションを指定して翻訳する必要があります。
CALL ”POWEROPENFORMUN” USING DLL名 フォーム名
PIC N(260).
開こうとしているフォームをもつDLLの名前です。領域の大きさは、260でなければなりません。
設定できる文字列は、英数字で260文字以下、日本語で130文字以下です。
RCSオプションの設定に従ってエンディアンは自動判定されます。
PIC N(14).
開こうとしている子フォームの名前です。領域の大きさは、14でなければなりません。
設定できる文字列は、英数字で14文字以下、日本語で7文字以下です。
RCSオプションの設定に従ってエンディアンは自動判定されます。
正常に終了した場合は0が設定されます。エラーが発生した場合には0以外の値が設定されます。
たとえば、PowerCOBOLで作成したSubU.DLL内のSubFormという名前のフォームを開く場合、以下のように記述します。
DATA DIVISION. WORKING-STORAGE SECTION. 01 DLL名 PIC N(260) VALUE "SubU.DLL". 01 フォーム名 PIC X(14) VALUE "SubForm". PROCEDURE DIVISION. … CALL "POWEROPENFORMUN" USING DLL名 フォーム名
オートメーションサーバとして利用する
NetCOBOLのCOM連携機能(*COMクラス)を利用することにより、PowerCOBOLのフォームをオートメーションサーバとして利用することができます。オートメーションサーバの利用方法については、『NetCOBOL ユーザーズガイド』を参照してください。また、フォームをオートメーションサーバとして作成する方法については、「9.4 オートメーションサーバを使ったアプリケーションを作成する」を参照してください。