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


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

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

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

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/04/11 16:54:36
  • 終了:2011/04/12 17:37:21

ベストアンサー

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752011/04/11 17:53:44

ポイント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

tdoi回答回数174ベストアンサー獲得回数752011/04/11 17:53:44ここでベストアンサー

ポイント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ベストアンサー獲得回数972011/04/11 17:56:40

ポイント27pt

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

ご確認ください。

id:taroe No.3

taroe回答回数1099ベストアンサー獲得回数1322011/04/11 19:39:56

ポイント26pt

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

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

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

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

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません