今回はDelphi/400で終了コード(終了ステータス)を受け取る方法を紹介します。
実行時引数を使って「呼び出し側」のEXE等から別のプログラムを呼び出す処理において、
逆に「呼び出される側」からのパラメータを「呼び出し側」で受け取る方法です。
「呼び出される側」はExitCode変数に対して値を代入後にプログラムを終了し、
「呼び出し側」は GetExitCodeProcess APIを使用して、
プロセスハンドルから、終了コードを受け取る事が可能です。
本記事では、その手順を解説します。
(※ExitCodeは整数型となります。初期値は0です。)
<呼び出される側の処理>
ExitCode := 1; // 返却値
<呼び出し側の処理>
※他のEXEを呼び出す方法はShellExecuteなどいくつか存在しますが、
ここではプロセスハンドルを取得できるCreateProcessを使用します。
var bRet: Boolean; SI: TStartupInfo; PI: TProcessInformation; caExitCode: Cardinal; // ここに値が返却される sExeName: string; begin // EXEを呼び出す GetStartupInfo(SI); sExeName:='XXXXXX.exe'; bRet := CreateProcess( PChar(sExeName), nil,nil,nil,False, CREATE_DEFAULT_ERROR_MODE, nil,nil,SI,PI); // エラーチェック if not bRet then begin // 起動に失敗したら例外を作成 raise Exception.Create('Exec Error' + IntToStr(GetLastError)); end else begin // 呼び出したEXEの終了待ち WaitForSingleObject(PI.hProcess,INFINITE); // 返却値の取得 GetExitCodeProcess(PI.hProcess,caExitCode); // ハンドルのクローズ CloseHandle(PI.hProcess); CloseHandle(PI.hThread); // 返却値の表示 ShowMessage(IntToStr(caExitCode)); end; end;
(ミガロ.情報マガジン「MIGARO News!!」Vol.129 2011年8月号より)
(Tipsメルマガ 2020年11月号より)