Как удалить командную строку из скомпилированной программы? - PullRequest
1 голос
/ 09 февраля 2012

Я недавно начал учебник, чтобы научиться кодировать GUI с помощью Windows API, и я столкнулся с неожиданным вопросом, который я считаю глупым.Я использую Code :: Blocks с компилятором OpenWatcom по умолчанию, и я создал простую программу с графическим интерфейсом, которая хорошо компилируется и связывается.Проблема в том, что когда я пытаюсь запустить программу, даже из версии выпуска что-то вроде командной строки появляется за окном моей программы, как будто я пытался запустить ее через опцию compile & run в Code :: Blocks.Есть ли способ удалить командную строку из показа? This is how it looks like when I run it.

РЕДАКТИРОВАТЬ: Это не проблема с моим основным определением.Это мое основное определение: |

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)    

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

В Windows исполняемый формат PE имеет флаг, который указывает, является ли исполняемый режим «консольным режимом» или «режимом GUI». Если «режим консоли», то ОС будет прикреплять окно консоли (открывая новое при необходимости) при каждом запуске программы.

Где-то в вашей среде сборки будет параметр компоновщика, который определяет, будет ли создаваемый вами EXE-файл помечен как консоль или графический интерфейс.

2 голосов
/ 09 февраля 2012

Управляется параметром компоновщика / SUBSYSTEM . В настоящее время он установлен на CONSOLE, и вам нужно изменить его на WINDOWS. В документации указано, как необходимо изменить main:

Приложение не требует консоли, возможно потому, что оно создает свои окна для взаимодействия с пользователем. Если WinMain или wWinMain определяется для собственного кода или WinMain (HISTANCE *, HINSTANCE *, char *, int) или wWinMain (HINSTANCE *, HINSTANCE *, wchar_t *, int) определено для управляемого кода, по умолчанию используется WINDOWS.

Специально для Code::Blocks параметр компоновщика можно изменить с помощью этого процесса :

В Code :: Blocks просто откройте диалог Project-> Properties, переключитесь на вкладка «Цели сборки» и измените «Тип» целей сборки, которые вы хотите изменить на «Приложение GUI» или «Консольное приложение». Незачем беспокоиться о «основной» функции.

0 голосов
/ 09 февраля 2012

Вместо функции main необходимо использовать стандартную точку входа Win32 WinMain:

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow);

См .: http://sol.gfxile.net/wintut/ch2.html

Или, если вы не можетеперекомпилировать, в Windows 7 вы можете просто сделать:

START myProgram {введите}

См .: http://support.microsoft.com/kb/126410

...