- ベストアンサー
プログラムの再起動
C++Builderでプログラム作ってます。 その作っているプログラムに、再起動を させたいのですが、どうすれば良いのでしょうか。 初心者なので、やさしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>自作プログラムのコードを検索すれば、WinMainがあるのですか? メニューの「プロジェクト(P)」に「ソース表示(V)」というのがありませんか? 蛇足ですが#3への補足です。 >2の方法ですと、グローバル変数があった場合にそのコンストラクタや >ディストラクタが実行されないので危険だと思うのですが、いかがです >か? 静的グローバル変数は初期化されないので危険をはらみますが、静的グローバル変数には初期化コードがあるだけでコンストラクタやディストラクタは存在しません(回答のコードを例にすればReboot変数が静的グローバル変数です) 動的グローバル変数は、メインフォームのクラス内に記述すれば、メインのフォームをReleaseした時点でディストラクタが呼ばれ、CreateForm()でフォームを再作成した時点でコンストラクタが呼ばれる筈です。 もし、独自のクラス内に動的グローバル変数を置いてあっても、そのクラスを生成、破棄する時点で、コンストラクタとディストラクタが呼ばれる筈です。
その他の回答 (3)
No.1のhsn_hidekiです。 chie65536さんへ質問です。 2の方法ですと、グローバル変数があった場合にそのコンストラクタやディストラクタが実行されないので危険だと思うのですが、いかがですか? 1の方法は確実に再起動されるので大丈夫ですよね。
- chie65536
- ベストアンサー率41% (2512/6032)
1. ShellExecuteEx関数で自分自身(Application->ExeName()が返す実行ファイル名)を起動し、呼び出し元プログラムを終了する。 2. WinMainの中を改造する。 bool Reboot; WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { Reboot = true; try { while (Reboot) { Reboot = false; Application->Initialize(); Application->CreateForm(__classid(TMainForm), &MainForm); Application->Run(); MainForm->Release(); } } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } 再起動したい場合、Reboot変数にtrueを設定した上でメインのフォームをクローズすると、もう一度メインのフォームが作成され、プログラムが再起動したように振るまいます。 なにもせずにメインのフォームをクローズすると普通に終了します。
再起動というのは、 1.パソコンの再起動 2.Windowsの再起動 3.お作りになってるプログラムの再起動 どれでしょうか?
補足
コードまで書いていただきありがとうございます。 ただ、「WinMainの中を改造する」というのが、わかりません。 自作プログラムのコードを検索すれば、WinMainがあるのですか? それともイベントのこと? 初心者なので、的外れかもしれませんが、 もう少しお願いします!!!