10

私は C++ にはかなり慣れていませんが、以前に .NET プログラミングを行ったことがあります。

main(...)との違いは何ですか。私はWinMain(...)以前に でプログラムを書き、main(...)と同じように Win32 関数を問題なく呼び出すことができましたWinMain(...)。違いが生じる・異なる?"

4

2 に答える 2

22

Microsoft ツールチェーンについて言えば、従来、Win32グラフィカルアプリケーションは常に で始まりWinMainコンソールmainアプリケーションには が使用されていました。

2 種類のアプリケーションの違いは、実際には (ほとんどの場合) 実行可能ファイルの 1 つの設定に要約され、機能ではなく、GUI アプリケーションはコンソールを作成でき、コンソール アプリケーションはウィンドウを作成できます。ローダー: GUI としてマークされた exe の場合、ローダーはコンソールを割り当てませんが、コンソール exe は親のコンソールに接続するか、存在しない場合は新しいコンソールを作成します。

エントリポイント名については、すべてリンカ/CRT のデフォルトの問題です。実行可能ファイルの「実際の」エントリ ポイントは、最終的な実行可能ファイルへの単なるオフセットであり、パラメータを取らない関数を指します。処理を実行し、パラメータを決定してから「あなたの」エントリポイントを呼び出すのは CRT であるため、原則として、どちらもまったく同じように機能します。

要点は、CRT が検索する既定のエントリポイントの名前/署名は、作成しているアプリケーションの種類によって異なります。コンソール アプリケーションをビルドするようにコンパイラとリンカが設定されている場合、コンパイラとリンカはmain( Unicode 設定によってはまたはwmainまたは)、使用する GUI アプリケーション、およびdll を探します。_tmainWinMainDllMain


そう:

  • WinMainGUI (= 起動時にコンソールが作成されない) アプリケーションを構築する場合に使用します。
  • mainコンソール アプリケーションの場合。
  • DllMaindll の場合。

繰り返しますが、これはすべて石で書かれているわけではありません (そして、標準から GUI アプリケーションを開始する方法がありますmain)。エントリポイントの署名を変更するためだけに、他の開発者を混乱させたり、テストされていない/サポートされていないコンパイラ設定を行ったりすることは避けてください。

于 2013-09-10T01:29:45.897 に答える
2

WinMain()WindowsベースのグラフィカルアプリケーションへのWindows固有のエントリポイントです(Windowsのものがあります)。main()標準の C++ エントリ ポイントです (Windows ではコンソール ベースのアプリケーションです)。

つまり、コンソール アプリケーションで GUI を使用し、GUI アプリケーションでコンソールを割り当てることができます。

MSDN で Windows のコンソールGUI アプリケーションについて読むことをお勧めします。

于 2013-09-10T01:28:08.990 に答える