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


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

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

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

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/04/12 17:37:21
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

ポイント200pt

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

ランチャーが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を引き起こし、プログラムが異常終了しているのではないかと思います。

何かの参考になれば。

id:harunoharuno

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

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

2011/04/12 17:36:19

その他の回答2件)

id:tdoi No.1

回答回数174ベストアンサー獲得回数75ここでベストアンサー

ポイント200pt

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

ランチャーが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を引き起こし、プログラムが異常終了しているのではないかと思います。

何かの参考になれば。

id:harunoharuno

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

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

2011/04/12 17:36:19
id:asuka645 No.2

回答回数856ベストアンサー獲得回数97

ポイント27pt

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

ご確認ください。

id:taroe No.3

回答回数1099ベストアンサー獲得回数132

ポイント26pt

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

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません