人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【VisualC++ プログラムのExitProcessについて】

既存プログラムAをランチャーBから起動しました。
既存プログラムAにはエラーコードとして4?-4を定義しているのですが、
プログラム終了後、ランチャーBでは意図していない値(-1073741819)
を受け取ってしまいます。

この値はどのようなときに受け取るものなのでしょうか?

捕捉
・既存プログラムAはExitProcessを用いて値を返している。
・既存プログラムAは単体動作する(ログなし)。
・ランチャーBでは、既存プログラムが存在するディレクトリをカレントにしてから呼び出している。

●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:C++ エラー カレント コード ディレクトリ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tdoi
●200ポイント ベストアンサー

状況がよく分からないので、想像を多く含みます。

ランチャーがCreateProcessなどで、プログラムAを起動し、その後、ランチャーがGetExitCodeProcessでステータスコードを取得しているということでいいでしょうか?

MSDNによると、GetExitCodeProcessは

?ExitProcess または TerminateProcess 関数で指定した終了コード。
?プロセスの main または WinMain 関数の戻り値。
?プロセスを終了させた、まだ処理されていない例外の例外コード。

を返します。

参考:http://msdn.microsoft.com/ja-jp/library/cc429117.aspx

ここから、プログラムAのExitProcessで-4から4までの値を指定して終了しているはずなのに、-1073741819が取得される。ということでしょうか?


さて、GetExitCodeProcessの説明をよく見ると、この関数は、「プロセスを終了させた、まだ処理されていない例外の例外コード。」を返すこともあります。つまり、想定したExitProcessが実行される前に何らかの例外が発生してプログラムが終了した場合です。

そこで、-1073741819を16進数に直してみると、「C0000005」です。

これはよく見るエラーコード(Access Violation)です。


この辺りから類推すると、プログラムAは単体では動作するものの、ランチャーから起動した場合は、パラメタなどの影響により、Access Violationを引き起こし、プログラムが異常終了しているのではないかと思います。

何かの参考になれば。

◎質問者からの返答

回答ありがとうございます。

とても参考になりました。


2 ● あすか
●27ポイント

ランチャー側ではGetExitCodeProcessを使って終了コードを取得していますか?

ご確認ください。


3 ● taroe
●26ポイント

http://msdn.microsoft.com/ja-jp/library/cc429099.aspx

http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_2372_3.html

ランチャーBから既存プログラムAを呼び出すのにどのような方法を使ってるのでしょうか?

その方法によって違います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ