付録A.4 アプリケーションプログラム作成時の注意事項
(1) TP1/LiNKのユーザアプリケーションプログラム(UAP)をシングルスレッド環境で実行
TP1/LiNKのUAPは,メインスレッド以外にスレッドを作成しないで,シングルスレッド環境で実行してください。メインスレッド以外のスレッドを作成して実行すると(マルチスレッド環境),UAPが誤動作して異常終了するおそれがあります。ただし,OpenTP1下のUAPはDLLを使用したマルチスレッド環境で動作するため,UAP作成時に指定するリンケージランタイムライブラリには,msvcrt.libを指定してください。
JNI(Java Native Interface)などのスレッドが生成されるコーディングはしないでください。この場合の動作は保証できません。
(2) UAPメッセージのイベントビューアへの出力
dc_logprint関数(COBOL言語の場合はCBLDCLOG('PRINT '))を使用したメッセージは,Windowsのイベントビューアに出力されます。なお,引数(COBOL言語の場合はデータ領域)に値を設定する場合,次の点に注意してください。
-
出力する文字列に,10行以上設定しないでください。
-
メッセージ表示色の設定は無視されます。
-
引数(COBOL言語の場合はデータ領域)に不正な値が設定された場合は,イベントビューアに「メッセージ不正のため,xx....xxは出力できません」(xx....xxはメッセージID)が出力されます。
(3) dc_adm_call_command関数,システム運用の管理のCOBOL-UAP作成用プログラム(CBLDCADM)を使用する場合
-
dc_adm_call_command関数のDCADM_DELAYフラグの設定は無効です。これは,dc_adm_call_command関数の出力情報の取得方式が,UNIXのOpenTP1とWindowsのTP1/LiNKで異なるためです。
-
コマンドラインの文字列中に'/',または'$'を含む場合,コマンドラインに対してTP1/LiNKが文字列変換処理を実行します。TP1/LiNKが行う文字列変換処理を無効にしてコマンドラインを実行したい場合は,[SPP環境設定]ダイアログボックスまたは[SUP環境設定]ダイアログボックスで,環境変数「DCADMCONVSEP」に「1」を設定してください。
-
コマンドライン文字列の末尾に'&'を記述したときの,指定したコマンドの非同期実行はサポートしていません。
-
dc_adm_call_command()の第一引数comに指定できる文字列の長さは500バイト以下です。501バイト以上指定するとdc_adm_call_command()はDCADMER_PARAMをリターンします。
-
CBLDCADM('COMMAND ')のデータ名Gに指定できる文字列の長さは500バイト以下です。501バイト以上指定するとCBLDCADM('COMMAND ')はステータスコードに01802を設定します。
(4) プロセス,スレッドを停止させる関数またはメソッドの呼び出し
TP1/LiNKのUAPでは,サービス関数(SPP)およびサービスメソッド(SPP.NET)内で,プロセスおよびスレッドを停止させる関数またはメソッドを呼び出さないでください。呼び出した場合,次に示す現象が発生することがあります。
-
サービス関数(SPP)およびサービスメソッド(SPP.NET)の予期しない動作
-
サービスグループに対するサービス要求の失敗
-
[TP1/LiNKアプリケーション管理SPP]ウィンドウでUAPを停止できない
-
TP1/LiNKを正常終了できない
(5) Visual Studioで作成したデバッグバージョンのオブジェクトファイル
Visual Studioで作成したデバッグバージョンのオブジェクトファイルは,Visual Studioがインストールされていない環境では動作させることができないおそれがあります。Visual Studioがインストールされていない環境でデバッグする場合,リンケージされたdllファイルおよびマニフェストファイルの内容を確認して,適切なマニフェストファイルを作成してください。マニフェストファイルの詳細については,Visual Studioのマニュアルのマニフェストについての記述を参照してください。
(6) スタブファイルをコンパイルする場合
stbmakeで作成されたC 言語のソースファイルをコンパイルする場合,必ずコンパイルオプション"/Zl"を指定してください。
(7) Visual StudioとHitachi COBOL2002を併用する場合
COBOL2002とVisual Studio併用時の注意事項については,COBOL2002のリリースノートの注意事項をご確認ください。
(8) WinSockのライブラリを使用する場合
WinSockのライブラリを使用する場合,TP1の通信処理ができなくなるため,次に示す関数を発行しないでください。
-
WSAStartup()
-
WSACleanup()