ページの先頭行へ戻る
NetCOBOL V12.2 PowerCOBOL ユーザーズガイド
FUJITSU Software

7.7 プログラミング上の留意事項

本節では、PowerCOBOLでプログラムを作成する場合の留意事項について説明します。

利用者語

PowerCOBOL内で翻訳の対象となる手続き内では、以下の文字で始まる利用者語を使用できません。

また、以下の名前と同じ文字列も使用できません。

PROGRAM-STATUS

プロパティを参照または設定すると、PROGRAM-STATUSの値は変更され、不定の値が設定されます。これは、PowerCOBOLが内部的にランタイムシステムのサブルーチンを呼び出しているためです。したがって、プロパティの参照または設定処理をまたがって、PROGRAM-STATUSを参照することはできません。

イベント手続きの引数

引数をもつイベント手続きを編集する場合、手続き中の連絡節(LINKAGE SECTION)やUSING指定を削除したり、引数の数を変更したりすると、正しく動作しない場合があります。

これらの記述を削除したり、変更したりしないようにしてください。

COBOLの表示ファイル機能

COBOLの表示ファイルを使用するプログラムでは、表示ファイルを扱う部分を、共通手続きまたは別翻訳単位として、かならずOPEN文からCLOSE文までを実行してから、呼び出し元に復帰するようにしてください。また、表示ファイルを開いているあいだは、フォーカスを別のウィンドウに移さないようにしてください。

手続きの終了方法

PowerCOBOLのアプリケーションでは、COBOLのSTOP RUN文を使用しないでください。STOP RUN文が実行されると、PowerCOBOLの資源がWindowsのメモリ上に残ったままプログラムが終了してしまいます。

手続きの無限ループ

イベント手続きの中で、再びそのイベントが発生する再帰的な手続きを記述すると、無限ループとなります。

たとえば、テキストボックスコントロールのChangeイベントで、同じコントロールのTextプロパティ(テキスト文字列)に文字列を設定すると、再びChangeイベントが発生します。このとき、終了するための判定がなければ無限ループとなります。このような場合、アプリケーションは通常、スタック違反で異常終了します。

イベント駆動型とサブシステムの応答

PowerCOBOLはイベント駆動型のランタイムシステムをもっています。したがって、たとえばプリンタやデータベースなど応答を待たなければならない(応答を待たずに続けて処理すると不具合が発生する)ようなサブシステムの処理では、プログラムの中で応答を待つような手続きを実行してください。

たとえば、コマンドボタンコントロール(Command1)のClickイベント中で、印刷コントロール(Print1)のPrintFormメソッドを記述している場合、コマンドボタンを複数回続けてクリックすると、アプリケーションが異常終了する場合があります。このような場合には、以下のように、PrintFormメソッドを実行する前後でコマンドボタンコントロールのEnabledプロパティの値を切り替えてください。

        MOVE POW-FALSE TO "Enabled" OF Command1.
        INVOKE Print1 "PrintForm".
        MOVE POW-TRUE TO "Enabled" OF Command1.

登録集ファイル

#INCLUDE文による、大量の登録集ファイルの利用は、デバッグや翻訳性能の点でお勧めできません。なるべく最小限にとどめるようにしてください。#INCLUDE文の使用方法については、「7.4 登録集ファイルの利用方法」を参照してください。

ロングファイル名の扱い

ロングファイル名を扱う場合、ファイル名のパスとして有効な文字数は259文字までです。ただし、上限まで長い名前を使用することはお勧めできません。

イベント発生順序

複数のコントロール間で発生するイベントの順序は、とくに決まっていません。たとえば、フォーム上に2つのテキストボックスコントロール(TextBox1とTextBox2)があり、TextBox1がフォーカスをもっている状態から、TextBox2にフォーカスが移った場合、TextBox1のLostFocusイベントとTextBox2のGotFocusイベントの発生順序は、決まっていません。

また、イベント手続きの記述内容によっては、イベント手続きの処理中に、次のイベント手続きが実行されてしまうこともあります。

したがって、アプリケーションを作成する場合は、イベントの発生順序に依存しないプログラムを作成してください。

UTF-32

PowerCOBOLのイベント手続きでは、UTF-32エンコードのデータ項目を利用することはできません。UTF-32エンコードのデータ項目を利用する場合は、別のCOBOLプログラムとして作成してイベント手続きから呼び出すようにしてください。