プロセスがメモリのアクセス違反などで落ちた場合、
プロセスの終了コードにはどんな値が入ってくるのでしょうか?
その値はどこかのヘッダで定義されているのでしょうか?

質問の経緯としては、、、
プロセスAは終了時、終了コードをセットして終了します。
で、プロセスBで終了コードをチェックしているのですが、
この場合、アクセス違反などで異常終了したときの終了コードと
プロセスAが設定する値がぶつからないか心配になるり、
質問させていただきました。

識者の方、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。

itohhといいます。

>アクセス違反などで異常終了したとき
基本的に例外処理を行っていないとシステムで「デバッグするか?」というダイアログを
表示してしまいます。

わたしがよく使う方法は。
例外処理(try、catch)で例外エラーを拾います。そして、エラーコードとメッセージを
取得してexit関数で終了コードを指定するようにします。
(実際のエラーコード、エラーメッセージはNTのイベントログに出力する)

例えば。
正常終了なら0。
異常終了なら1。(エラーによって詳細に分けても良いです。)
などです。

これで、終了を監視しているプロセスで統一したコードが渡ります。

こんな方法では如何でしょうか?

try、catchの使い方は、MSDNライブラリを参照してください。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。
参考にさせて頂きます。

お礼日時:2002/04/05 18:12

プロセスステータスは実行環境依存です。


少なくともOSが指定されていないと答えようがありません。

この回答への補足

すみません、その通りです。
書き忘れました。

OSは Windows NT 4.0 です。

補足日時:2002/03/27 15:10
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q美容室の広告に載っている「ワンプロセス」の意味。

髪を切ろうと思い、ホットペッパーで美容室を
探していました。

カラーとか、パーマのとこに「ワンプロセスのみ」
という表示がされていることがありますが、
これはどのような意味なのでしょうか?

ご存知の方、教えてください。よろしくお願いします。

Aベストアンサー

ワンプロセスと言うのは、1回だけと言うことです。

たとえばカラーなら、1度薬液を付けるだけとかです。
カラーの場合は、新生毛とカラーの毛(既成毛)とでは色合いが違いますので、同じ薬液を塗れませんので2プロセス以上の施術になりますね。

Qアクセス違反でアプリケーションポップアップが出たのにプロセスが終了しない

OS:Windows2000、VC++6.0 の環境です。
自作のアプリケーションにてアクセス違反が発生し、
以下のアプリケーションポップアップが出ました。

アプリケーションポップアップ: AAA.exe - アプリケーション エラー :
"0x0c88026d" の命令が "0x09680048" のメモリを参照しました。
メモリが "written" になることはできませんでした。
プログラムを終了するには [OK] をクリックしてください
プログラムをデバッグするには [キャンセル] をクリックしてください

で、「OK」ボタンを押したのですが、プロセスは終了せず、
処理が続行されてしまいました。
なぜプロセスが終了しないのかがわかりません。
何かの設定でしょうか???

識者の方、ご教授願います。

Aベストアンサー

こんにちは。itohhといいます。

AAA.EXEがどのような処理を行うプログラムなのかわかりませんが。
例えば、
マルチスレッドなどの場合、起こりえるのではないでしょうか?

ただ、わたしもそのような現象は体験したことがありません。

余計なお世話かもしれませんが。(^^;
作成した本人しか使用しないプログラムなら良いですが、そうでない場合は、
例外処理を行ってそのようなダイアログボックスを出さないようにした方が良いですよ。

Qプロセス監視とサービス監視

下記の質問にてプロセスとサービスの違いについて少し理解ができました。
http://oshiete.goo.ne.jp/qa/7395829.html

しかし、私の理解が正しいとするとプロセスはサービスよりも詳細な単位になるためプロセス監視を行えばサービス監視は行えているということになります。

そこで二点質問がございます。
1.上記の私の理解は正しいか
2.プロセス監視ではなく、サービス監視を行う具体的な意味は

ご教示いただけますと幸いです。

Aベストアンサー

・UNIX系のinetdやwindowsのsvchostなどプロセス名とサービスが単純に結びついていないサービスがあります。
・プロセスは起動しているが、ハングアップなどでサービスとして機能していない場合があります

Qアプリケーション終了時例外エラー(アクセス違反)の調査方法について

大変困っています。

アプリケーションが終了するときに「アクセス違反」がワトソン博士によって取得されています。
当方アプリケーションなどに弱く、解決策の想像が付きません。どなたかご教授お願いいたします。

<解決策例>
・どういったスキルを持った人にどの様な調査を進めさせれば良いのか。。。
・以前同様な事があり原因は○○だった
・恐らく○○だろう
 など、お願いいたします。

<ユーザ報告>
処理終了し、画面が消えたところでワトソン博士のメッセージが表示された

<ログ抜粋>
例外番号c0000005(アクセス違反)

ファンクション:RtlDestroyHeap
~略~
フォールト → 77f6d672 8908 mov [eax],ecx ds:09000001=00000000

<備考>
開発環境:MSVC6.0
動作環境:Windows NT4.0 SP6a
発生頻度:2回/年
使用頻度:2~3回/(平日)

以上、よろしくお願いします。

Aベストアンサー

発生頻度が年2回というのはなかなか厳しい条件ですね。

さて・・・

「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。

場所はここです: http://support.microsoft.com/kb/168006/ja

要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB自体は特定のアプリケーションについて書かれていますが、記述されている現象と原因の関係から考えるに、他のアプリケーションでも同様の現象が発生すると思われます。

さてさて。

せっかく書いた文章を捨てるのがもったいないので(貧乏性)、邪魔かもしれませんが下に続けることにします。もし上のKBの内容がそれらしいようであれば、読み飛ばしてください。

========

私であれば、次の手順で調査を行います。

1. MAPファイル、CODファイル作成

「ワトソン博士のログを取得した際に実行していたEXEファイル」をビルドした際、一緒にMAPファイルやCODファイル(リスティングファイル)を作成していれば、そのファイルを用意しておきます。

もし作成していない場合は、「ワトソン博士のログを取得したEXEファイル」と、バイナリレベルで全く同じEXEファイル(バイト単位で比較すると、ファイルに埋め込まれたタイムスタンプ・チェックサム以外は一致する)が作成可能かどうか調べます。(ビルドに必要なソースファイルやビルドオプションに変更を加えていなければ作成可能です。)

作成可能であれば、コンパイルオプションに「リスティングファイルタイプ:マシン語コードとソースを含む」、リンクオプションに「MAPファイル作成」を追加してEXEを再作成してください。これで、「ワトソン博士のログを取得した際に実行していたEXEファイル」に対応するMAPファイルとCODファイルが得られます。

2. エラー発生行を特定

ワトソン博士のログがどれだけ取れているかにもよりますが、スタックダンプが含まれていればたいていエラー発生行を特定できます。

まず「フォールト->」が含まれる逆アセンブルリストを探します。次に、その下にある「スタックバックトレース」を探します。

スタックバックトレースを上から下に順にたどっていくと、そのうち「ReturnAd」(リターンアドレス)がアプリケーションのアドレス範囲(VC++6の標準オプション設定を変更していなければ0x00400000~)に入るところが出てきます。見つかったら、そのアドレスの直前にあるcall命令が例外を発生させたAPIを直接呼び出している場所です。

さて、仮にリターンアドレスが0x00401234だったとします。そうしたら、次はMAPファイルを見てこのアドレスがどの関数に属しているか探します。ちょうど0x00401234というアドレスは見つからないでしょうけれども、これに近いアドレスは見つかるはずです。そのアドレスに対応する関数名もMAPファイルにあります。

次はその関数名をCODファイルから探します。見つかったら、MAPファイルにあるアドレスがCODファイルにあるマシン語コードの先頭アドレスになるので、そこからリターンアドレス0x00401234に対応するはずの場所まで順番にアドレスを辿っていきます。関数の先頭アドレスが0x00401200であれば、0x34バイト先を探すわけです。

そうすると、その探した場所にある命令の直前の命令がcall命令になっているはずです。CODファイルには、その場所のC++ソースでの行番号とソース文もコメントとして入っているはずなので、あとは対応するソースをよーく見てエラーの見当をつけてください。

アセンブラの知識があれば、そこでcallを使った(他の関数を呼び出した)ときの引数の内容もある程度分かります。(ポインタ渡しだと、そのポインタの先の内容までは分かりませんが。)

3. 置き換え用EXEファイルと対応するMAPファイル作成

これ以降は将来への備えです。

コンパイルオプションでデバッグ情報を「プログラムデータベースを使用」、リスティングファイルタイプを「マシン語コードとソースを含む」、リンクオプションで「MAPファイルを作成する」、デバッグ情報「他の種類」を追加してビルドし、出来たEXEファイルを本番用として使用します。同時に作成されるMAPファイル、CODファイル、PDBファイルは保管しておきます。

MAPファイル、CODファイルの使い方は上記2.のとおりです。PDBファイルは、もし完全なクラッシュダンプが取得できればWinDbgを使って事後ソースレベルデバッグが可能になりデバッグ作業が非常に楽になるので、念のため取っておきます。

4. ワトソン博士のオプション変更

drwtsn32.exeを起動し、「クラッシュダンプファイルの作成」をチェックします。(デフォルトは、チェックが入っています。)

クラッシュダンプファイルとEXEとPDBがあればWinDbgで事後ソースレベルデバッグができます。(いわゆるポストモーテムデバッグです。UNIX系でコアダンプしたコアをデバッガで読み込んでデバッグするのと同じ種類のものです。)


普段何とも思わずに行っていることでも、文章にすると長いですね・・・

えーと、「どういうスキルを持った人に調査させればいいか」については、上記の内容を読んで『なるほど!』と言える人でしょうか。

参考URL:http://support.microsoft.com/kb/168006/ja

発生頻度が年2回というのはなかなか厳しい条件ですね。

さて・・・

「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。

場所はここです: http://support.microsoft.com/kb/168006/ja

要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB...続きを読む

Q子プロセス、

親プロセスから子プロセスを生成するとは具体的に何を意味しているのでしょうか?
またresume文とはなんでしょうか?
何をしてくれているのでしょうか?
なぜUNIXは安定していると言われるのでしょうか?
聞いたけど忘れてしまいました、
お願いします。

Aベストアンサー

再レスです。
身近な例ですとエクセルとかで新規作成ボタンを押すと新しいシートが作られるじゃないですか。
いくつも作れてどれも同じ動作やインターフェースをしています。
それらのシートはボタンが押されるまで存在しなかったものです。
また、それらは独立しているので、どのシートに移動しても構いませんよね。
立派な子プロセスですよね。メモ帳なんかだと親プロセスが新たに開きますね。
この例ではユーザーの操作によるものですが、プログラムによっては内部でプロセスを作り並列的に動作するものもあります。

Qウインドウのプロセス終了について

今C++でタスクバーのウインドの列挙を行い、またプロセスIDの取得を
できたのですがこれらを終了させる方法がわかりません。
いろいろ調べてみたのですが、UNIXでのkillコマンドに匹敵する
関数がわかりません。
自分が調べたところ使えそうなのは。
CloseMainWindow関数
TerminateProcess関数
などができそうなのではと考えています。
また
http://akky.cjb.net/mfc/appclose.html
ここに書いてあるソースを打ってみたのですが、
思うように動きませんでした。
どうしたらよいでしょうか。
具体的な方法(プログラム)がほしいです。
よろしくお願いします。

Aベストアンサー

★アドバイス
・ウインドウの列挙は出来ているのならばそのウインドウ・ハンドルを使って
 WM_CLOSE メッセージを送れば良いでしょう。
 以前、GetWindowThreadProcessId 関数の使い方を質問した方ですね。
・プロセスを終了するだけなら次の1行で出来ると思います。
 SendMessage( 列挙したウインドウのハンドル, WM_CLOSE, 0, 0 );
 これ1行です。
・なお、TerminateProcess 関数は強制的にプロセスを終了させるかなり強引な
 方法です。この方法はあまりお勧めできません。
 理由はメモ帳などでまだ保存されていないデータは失われます。
 WM_CLOSE メッセージなら確認のダイアログなどが出ると思います。
 強制的にプロセスを終了させる場合以外は TerminateProcess 関数は使わないこと。
・参考にしているサイトは自ら起動したプロセスを GetWindowThreadProcessId 関数を
 使ってプロセスIDをチェックしています。また、このサイトでも終了させる方法に
 PostMessage( hWnd, WM_CLOSE, 0, 0 );
 としています。既に答えが書かれていますよ。(笑)

サンプル:
int main( void )
{
 HWND hWnd;
 
 // 列挙したウインドウハンドルの代わり
 hWnd = FindWindow( "Notepad", NULL );
 
 if ( hWnd != NULL ){
  printf( "メモ帳を終了します。-- pause --\n" );
  getchar();
  PostMessage( hWnd, WM_CLOSE, 0, 0 );
 }
 else{
  printf( "メモ帳を起動してから実行して下さい。\n" );
 }
 return 0;
}

メモ帳に何か文字を入力してから実行してみると終了しようとしたときにメモ帳から
保存の確認ダイアログが出ます。これを出さずに強制終了させたい場合には
TerminateProcess 関数などを使います。
以上。

★アドバイス
・ウインドウの列挙は出来ているのならばそのウインドウ・ハンドルを使って
 WM_CLOSE メッセージを送れば良いでしょう。
 以前、GetWindowThreadProcessId 関数の使い方を質問した方ですね。
・プロセスを終了するだけなら次の1行で出来ると思います。
 SendMessage( 列挙したウインドウのハンドル, WM_CLOSE, 0, 0 );
 これ1行です。
・なお、TerminateProcess 関数は強制的にプロセスを終了させるかなり強引な
 方法です。この方法はあまりお勧めできません。
 理由はメモ帳など...続きを読む

Qビジネスの場における「プロセス」とは?

初めまして、今現在大学生で、企業にてインターンをやっています。

上司や社員と会話、会議をする際に「プロセス(Process)」という言葉がよく使われるんですが、その言葉自体の概念、意味を理解できていないせいでまったくピンと(理解で)きません。

例えば、ある事、業務を上司に説明した際に、
「プロセスでものを考えないと伝えたいことが上手く伝わらない」、
「このプロジェクトに関してのプロセスを資料としてまとめて」など言われます。

ここで言う「プロセス」とはどういう事でしょうか?
質問が抽象的過ぎて、答えにくいかと思いますがお願いします。

Aベストアンサー

日本語としては「手順」・「流れ」でいいんですが、「プロセス」と
言った場合、言外に「何か全体としての"システム"が存在して、
その結果としての"手順"」という意味があります。

「システム」が中身で、それが外に出てきたものが「プロセス」と
いう感じですね。往々にしてこの2つの言葉はセットにして使われ
たりしますし・・・。

単に「手順」と受け取ると、言外にある「全体としての"システム"」
を見落としてしまう可能性がある、という点には注意して下さいね。

Qタスクマネージャの「プロセスの終了」を禁止

VC++6.0で作成したソフトウェアを、タスクマネージャの「プロセスの終了」で終了させられなくする方法を教えて下さい。
「Users]グループで終了出来なければいいので、そのソフトウェアの権限をあげればいいのかな?とは思うのですが・・・。
出来れば、InstallShieldでそういう設定をしたいです。
(そのソフトは、インストール後は、自動起動します。)

Aベストアンサー

★なるほどね。
・単純な方法でよいならメッセージ処理をちょっとだけ細工するのはどうですか。
 アイディアとして、その終了したくないソフトウェアに
 (1)WM_QUIT
 (2)WM_DESTORY
 (3)WM_CLOSE
 を処理します。ただし、中身は空っぽにします。
・未確認ですが、多分これで『タスクマネージャ』の『プロセスの終了』ボタンより
 強制終了を禁止できると思います。ただし、Windows が終了したときに正常に終了
 させるために WM_QUERYENDSESSION か、WM_ENDSESSION メッセージ内でウインドウを
 破棄する処理などの終了処理を記述します。お勧めは WM_ENDSESSION メッセージ内に
 WM_QUIT、WM_DESTORY、WM_CLOSE で記述している終了処理を記述するのです。
・その他、タスクマネージャから『プロセスの終了』ボタンが押されたとき、メッセージの
 WM_QUIT、WM_DESTORY、WM_CLOSE で強制終了できません。というメッセージを出しておくとか。
 あとタスクマネージャの『シャットダウン』タブから『電源を切る』とか『再起動』などで
 正常にプログラムが終了するかなどを試して下さい。
・メッセージの資料として下の『参考URL』と『参考資料』を張っておきます。どうぞ。
・以上。参考アイディアでした。

参考資料:
http://www.winapi-database.com/Message/WM/WM_ENDSESSION.html→『WM_ENDSESSION』
http://www.winapi-database.com/Message/WM/WM_QUERYENDSESSION.html→『WM_QUERYENDSESSION』

参考URL:http://www.winapi-database.com/Message/WM/index.html

★なるほどね。
・単純な方法でよいならメッセージ処理をちょっとだけ細工するのはどうですか。
 アイディアとして、その終了したくないソフトウェアに
 (1)WM_QUIT
 (2)WM_DESTORY
 (3)WM_CLOSE
 を処理します。ただし、中身は空っぽにします。
・未確認ですが、多分これで『タスクマネージャ』の『プロセスの終了』ボタンより
 強制終了を禁止できると思います。ただし、Windows が終了したときに正常に終了
 させるために WM_QUERYENDSESSION か、WM_ENDSESSION メッセージ内でウインドウを
 ...続きを読む

Qillustrator 特色やグローバルプロセスカラーについて

illustrator初心者です。
スウォッチパレットというのがあって、グローバルプロセスカラーや特色などあるのですが、このグローバルプロセスカラーを特色に変換するということはどういう意味があるのですか?
また、色を登録するときにはどの色でも特色として登録することができるのでしょうか?
よろしくお願いします。

Aベストアンサー

>一般に使う場合にはillustratorのスウォッチオプションの特色をプロセスカラーに変換して使用したりすることにはどんな意味があるのですか?それとも、これはほとんど印刷所向けのための機能なのでしょうか?

こうした板で色に関する論議をする際は、RGBカラー系とCMYKカラー系を切り分けておかないとややこしくなります。
一般の人にはCMYKも特色も無縁の領域ですから、先にも言ったように「どうぞお好きなように」です。つまり家庭用や事務用プリンタのインクはお望みのインクに変えることはできないからです。同様にプロセスカラーというCMYKについても一般のパソコンユーザには無縁な領域であり、使いようのない色体系です。
このようにプロセスカラーとかillustratorのスォッチとして登録されているDICやパントンなどは、インキを変更できる商業印刷機だけの独特のカラー体系で、それをパソコン上で事前にシミュレートする機能としてあると受け止めてください。
ただしモニタのカラー体系はRGBですから、スオッチにある特色も印刷された時の色とはずれがあります。そこで実際に印刷されたカラーチップで確認しておかないと、結果確認にはなりません。

>DTPをマスターするには印刷会社などにアルバイトしたほうが早く覚えられるのでしょうか・・・。

将来商業印刷関連の職種を指向するなら、この世界の空気に触れておくことは有意義でしょう。ただし色の決定権はデザイナーやクライアントにあるので、印刷所のオペレーターが自己決定するケースはそうザラにあるわけではありません。その辺も考慮の内に入れておいてください。
もしDTPとCMYKカラー体系について勉強したいのであれば、
↓『DTP&印刷スーパーしくみ事典』がお薦めです。

http://www.jagat.or.jp/books/Catalog/itaku.htm

参考URL:http://www.jagat.or.jp/books/Catalog/itaku.htm

>一般に使う場合にはillustratorのスウォッチオプションの特色をプロセスカラーに変換して使用したりすることにはどんな意味があるのですか?それとも、これはほとんど印刷所向けのための機能なのでしょうか?

こうした板で色に関する論議をする際は、RGBカラー系とCMYKカラー系を切り分けておかないとややこしくなります。
一般の人にはCMYKも特色も無縁の領域ですから、先にも言ったように「どうぞお好きなように」です。つまり家庭用や事務用プリンタのインクはお望みのインクに変えることはできないからで...続きを読む

QUnicode でのWin32アプリのプロセスが終了しません

Visual Studio 2008 のVC++ でのアプリ開発について困っています。
開発環境はOS:Vista Ultimate 64bitです。
開発しようとしているのはWin32プロジェクトです。
先ず以下がソースです。
---
/** @brief メインファイル */
// Option declarations
#define STRICT
#define WIN32_LEAN_AND_MEAN

// Includes
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<tchar.h>
#include<process.h>
#include<windows.h>
#include<windowsx.h>
#include<winerror.h>

// Constance declarations
#define WND_CX (1024)
#define WND_CY (768)
#define ERR_QUIT (-1)

// Structures declarations
typedef struct _winapp
{
HINSTANCE hInst;
HWND hWnd;
TCHAR sTitle[128];
TCHAR sWndClass[128];
}WINAPP, *PWINAPP;

// Prototype declarations
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
HRESULT Init(WINAPP& app);
long Uninit(WINAPP& app);
WPARAM MsgLoop(WINAPP& app);
long Idle(void);

// Global variables
WINAPP g_app;

/** @brief Entry point */
int WINAPI ::_tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR pCmdLine, int shwcmd)
{
// Win32App initialize
::memset(&g_app, 0, sizeof(g_app));
g_app.hInst = hInst;
::_tcscpy_s(g_app.sTitle, sizeof(g_app.sTitle), _T("myapp"));
::_tcscpy_s(g_app.sWndClass, sizeof(g_app.sWndClass), _T("myapp"));

HRESULT hr = ::Init(g_app);
if(FAILED(hr))
return ERR_QUIT;

// Message loop
WPARAM wp = ::MsgLoop(g_app);
// WinApp32 uninitialize
::Uninit(g_app);

return (int)wp;
}

/** @brief Main window procedure */
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch(msg){
case WM_DESTROY:
::PostQuitMessage(0);
g_app.hWnd = NULL;
break;
default:
return ::DefWindowProc(hWnd, msg, wp, lp);
}

return 0;
}

/** @brief Initialize win32 application */
HRESULT Init(WINAPP& app)
{
// Register window class
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)::WndProc;
wc.cbClsExtra = wc.cbWndExtra = 0;
wc.hInstance = app.hInst;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = app.sWndClass;

if(::RegisterClassEx(&wc)==0)
return ::GetLastError();

// Create main window
RECT rc = { 0, 0, WND_CX, WND_CY};
::AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
g_app.hWnd = ::CreateWindow( app.sWndClass, app.sTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right-rc.left, rc.bottom-rc.top, NULL, NULL, app.hInst, NULL);
if(app.hWnd==NULL)
return ::GetLastError();

// Show window
::ShowWindow(app.hWnd, SW_SHOWNORMAL);
::UpdateWindow(app.hWnd);

return S_OK;
}

/** @brief Uninitalize win32 application */
long Uninit(WINAPP& app)
{
return ::UnregisterClass(app.sWndClass, app.hInst);
}

/** @brief Message loop */
WPARAM MsgLoop(WINAPP& app)
{
MSG msg = {};
while(msg.message!=WM_QUIT){
if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}else{
// Idle process
if(Idle()==0)
::DestroyWindow(app.hWnd); // Occur error and exit application.
}
}

return msg.wParam;
}

/** @brief Idle process */
long Idle(void)
{
return 1;
}
---
以上がソースなのですがプロジェクトのプロパティの文字セットが
Unicodeだとプロセスが終了しません。
文字セットをマルチバイトに変更するとプロセスは終了します。
なお、メイン関数を終了はしている様子。
どなたか理由がお分かりになる方はおられませんでしょうか?
お手数ですがご回答いただければ幸いです。

Visual Studio 2008 のVC++ でのアプリ開発について困っています。
開発環境はOS:Vista Ultimate 64bitです。
開発しようとしているのはWin32プロジェクトです。
先ず以下がソースです。
---
/** @brief メインファイル */
// Option declarations
#define STRICT
#define WIN32_LEAN_AND_MEAN

// Includes
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<tchar.h>
#include<process.h>
#include<windows.h>
#include<windowsx.h>
#include<winerror.h>

// Con...続きを読む

Aベストアンサー

> while(msg.message!=WM_QUIT){
WM_QUITを処理した後、終了してるみたいですけど、ここが気になります。
WM_QUITの後には、処理すべきメッセージは来ないんですかね。

Win32 アプリケーションの作成 (C++)
http://msdn.microsoft.com/ja-jp/library/bb384843.aspx


人気Q&Aランキング

おすすめ情報