プロが教えるわが家の防犯対策術!

C++Builderでプログラム作ってます。
その作っているプログラムに、再起動を
させたいのですが、どうすれば良いのでしょうか。
初心者なので、やさしくお願いします。

A 回答 (4件)

>自作プログラムのコードを検索すれば、WinMainがあるのですか?


メニューの「プロジェクト(P)」に「ソース表示(V)」というのがありませんか?

蛇足ですが#3への補足です。
>2の方法ですと、グローバル変数があった場合にそのコンストラクタや
>ディストラクタが実行されないので危険だと思うのですが、いかがです
>か?
静的グローバル変数は初期化されないので危険をはらみますが、静的グローバル変数には初期化コードがあるだけでコンストラクタやディストラクタは存在しません(回答のコードを例にすればReboot変数が静的グローバル変数です)
動的グローバル変数は、メインフォームのクラス内に記述すれば、メインのフォームをReleaseした時点でディストラクタが呼ばれ、CreateForm()でフォームを再作成した時点でコンストラクタが呼ばれる筈です。
もし、独自のクラス内に動的グローバル変数を置いてあっても、そのクラスを生成、破棄する時点で、コンストラクタとディストラクタが呼ばれる筈です。
    • good
    • 0

No.1のhsn_hidekiです。



chie65536さんへ質問です。

2の方法ですと、グローバル変数があった場合にそのコンストラクタやディストラクタが実行されないので危険だと思うのですが、いかがですか?

1の方法は確実に再起動されるので大丈夫ですよね。
    • good
    • 0

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を設定した上でメインのフォームをクローズすると、もう一度メインのフォームが作成され、プログラムが再起動したように振るまいます。
なにもせずにメインのフォームをクローズすると普通に終了します。

この回答への補足

コードまで書いていただきありがとうございます。
ただ、「WinMainの中を改造する」というのが、わかりません。
自作プログラムのコードを検索すれば、WinMainがあるのですか?
それともイベントのこと?
初心者なので、的外れかもしれませんが、
もう少しお願いします!!!

補足日時:2004/12/10 00:02
    • good
    • 0

再起動というのは、



1.パソコンの再起動
2.Windowsの再起動
3.お作りになってるプログラムの再起動

どれでしょうか?
    • good
    • 0

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