2

私の会社には、ドキュメントオブジェクトモデルを備えた大規模なWindowsアプリケーションがあります。アプリケーションを開き、ファイルを開き、変更を加え、保存し、閉じます。GUIを上部から切り離して、いくつかのパラメーターを受け入れ、ファイルを開き、何か便利なことを行い、保存し、ファイルを閉じて、終了するコンソールアプリケーションを作成しようとしています。レガシーコードが大量にあるため、VCLフォームアプリケーションを使用して、コマンドライン(またはバッチスクリプト)から起動する必要があります。ステータスメッセージを書き出したり、「-version」や「-?」などのオプションに応答したりできるように、stdoutに出力できる必要があります。私はこのトピックについてグーグル検索をするのに朝中過ごしました、そして私は役に立つものを何も見つけませんでした。

このアプリケーションは、VCLを使用してCodeGear C ++Builder2007で記述されています。

4

3 に答える 3

2

コンソール ウィンドウを表示するだけの場合は、AllocConsole と FreeConsole を呼び出すことができます。次に、コンソール アプリケーションで通常行うように、WriteLn('xxx') を呼び出すだけです。ただし、このアプリケーションをコマンド ラインから実行すると、新しいコンソールが作成され、標準出力は呼び出し元のコンソールではなく新しいコンソールに送られます。

AllocConsole と FreeConsole は、Windows ユニットでプロトタイプが作成されています。

于 2009-09-30T20:15:30.150 に答える
1

GUI プログラムで STDOUT に書き込むことができます。実際のコンソールから起動しない限り、コンソールがないため、通常は何も出力されません。または、 Win32 API の 関数GetStdHandle()と関数を見てください。有効なハンドルが返されたWriteConsole()場合は、それに書き込むことができます。GetStdHandle()これは、独自の目的で STDOUT 出力をインターセプトしたい別のアプリによって GUI アプリが起動された場合に特に役立ちます。

于 2009-09-23T22:39:10.810 に答える
0

プロジェクト ファイルで {$APPTYPE CONSOLE} を使用します。これにより、コンソールが割り当てられます (アプリがまだフォームに基づいている場合でも)。

別の方法として、プロジェクト (.DPR) ファイルのコマンドライン パラメータに基づいて分岐を行うこともできます (Delphi コードが続きます - C++ Builder に相当するものに変換する必要があります)。まだ APPTYPE 定義が必要です。または、Win32 API コンソール関数を使用して独自のコンソールを作成する必要があります (詳細については、MSDN コンソール関数を参照してください)。

begin
  if ParamCount() > 0 then
    DoWhateverTheConsoleAppWouldDoHere()
  else
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end;
于 2009-09-23T19:08:23.903 に答える