9

Visual C ++では、Glut / FreeGlut/GLFWを試してみました。これらのプロジェクトはすべて、デフォルトでCMDウィンドウを追加しているようです。私はそれを下に置いて削除しようとしました:

プロパティ->C/C++->プリプロセッサ->プリプロセッサの定義

ここから、_CONSOLEを削除し、_WINDOWSに置き換えます

それから私は下に行きました:

プロパティ->リンカー->システム->サブシステム

そして、オプションをWindows(/ SUBSYSTEM:WINDOWS)に設定しました

次に、GLFWでコンパイルしようとすると、次のビルドエラーが発生します。

  • エラー1エラーLNK2001:未解決の外部シンボル_WinMain@16 MSVCRT.lib

  • エラー2致命的なエラーLNK1120:1未解決の外部glfwWindow.exe

コンソールウィンドウを削除することは可能ですか?

4

8 に答える 8

18

リンカオプションで、エントリポイントをmainCRTStartupに設定します。この関数は、MS libcの必要なセットアップを実行してから、mainを呼び出します。

于 2011-06-04T20:09:10.637 に答える
11

私のプロジェクトにはmain, (no WinMain) があり、コンソールを無効にするには、Linker->System->SubSystem を " Windows (/SUBSYSTEM:WINDOWS)" ではなく " " に設定するConsole (/SUBSYSTEM:CONSOLE)と、コンソールが消えます。

コンソール ウィンドウを削除するために、プリプロセッサ定義をいじる必要はありません。

私の答えが数年遅れていることは知っていますが、役に立てば幸いです。

于 2014-06-18T12:13:29.593 に答える
10

ほとんどのリンカーは、コンソールの起動コードを自動的に削除するオプションをサポートしています。

GCCでは-mwindowsと呼ばれていると思います

于 2011-07-07T18:18:16.780 に答える
6

非コンソール Windows アプリケーションは、WinMain()エントリ ポイント規則を使用します。Glut の例では、おそらく標準の Cmain()規則を使用しています。

デモ アプリだけの簡単な修正が必要な場合は、WinAPI 関数FreeConsole()が役立つ場合があります。

MSDN: http://msdn.microsoft.com/en-us/library/ms683150(v=vs.85).aspx

于 2011-05-13T17:19:05.080 に答える
1

WinMainエントリ ポイントを作成し、既存のコードをコピーする必要があります (からmain)。

int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
){
    // ...
}
于 2011-05-13T17:17:54.617 に答える
0

そのようなエラーが発生した場合、次のテキストをlinkerセクションAdvance、オプションEntry Pointに入力することで修正できました。

主要

于 2011-05-13T17:18:13.440 に答える
0

新しいプロジェクトをコンソール アプリケーションとして作成すると、常にそのように実行されます。実際のウィンドウで実行する場合は、新しい GUI プロジェクトを作成する必要があります。そうしないと、正しいヘッダーとライブラリが含まれません。

また、必要な WinMain 関数は、結果のテンプレート ファイルに含まれます。

于 2011-05-13T17:16:45.810 に答える