今回は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月号より)