Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Принципиальное отличие консольных и GUI- приложений (http://forum.oszone.net/showthread.php?t=74503)

CyraxZ 13-11-2006 11:26 510889

Принципиальное отличие консольных и GUI- приложений
 
В чём принципиальная разница между консольными приложениями и GUI-приложениями ?
Ведь бывают чисто консольные приложения и консольные приложения с графическими окнами, а также GUI-приложения с консольным окном (т.е. они в процессе своей работы открывают консольное окно)...

hasherfrog 13-11-2006 13:53 510962

Если очень коротко:

1. В организации входа.
int main(...) - для консольных
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE, PSTR, int iShow) - для GUI

2. Плюс, в код консольного приложения по умолчанию включается всякая дребедень по поддержке консоли.

Цитата:

Цитата http://www.gamedev.ru/articles/?id=70033
Немного терминологии. Называть эту статью введением в Win32 было бы неверно — консольное приложение под Windows такое же полноправное Win32 приложение. Что такое консольное приложение? Ах да - да ты ведь регулярно сталкиваешься с такими программами - например мой любимый файл-менеджер FAR является полноценным консольным Win32 приложением. Точка входа для консольных приложений та же, что и в дос программах на Си - это функция main(). Однозначно разделять оконные приложения и консольные тоже, как мне кажется, было бы не правильно - программа, использующая как точку входа в программу WinMain(), как это ни странно, может и не создавать окно, а даже организовать свою консоль (!) вызовом AllocConsole(), а консольное приложение без проблем может создать окно. Возникает лишь один резонный вопрос: зачем это нужно? ;) Консольные приложения хороши своей самодостаточностью — они идеально подходят для утилит командной строки. О достоинствах оконных приложений я говорить не буду - чуть ниже мы перейдем напрямую к оконным приложениям под Windows.

Архитектурно, эти обе категории различаются стабом (stub) который прилинковывается к твоему откомпилированному коду - в данном контексте под стабом подразумевается некий программный код, выполняемый до (и по выходу) передачи управления в main() или WinMain() (в зависимости от типа приложения). Стабы различны для каждых фирм и часто для разных версий одного и того же продукта - что вполне логично. Например, стаб Борланда не совпадает со стабом от MS, хотя обычно они выполняют одни и те же цели - инициализацию каких-либо внутренних обработчиков и т.п. Исходные тексты стаба (кстати говоря, обычно открыты и исходные тексты рантайм функций - например, вполне реально найти исходный текст знакомых тебе fopen() или printf()) открыты. Например, при инсталяции Visual C++ ты можешь установить и исходные тексты стаба и рантайма (по умолчанию в \CRT\SRC).

Где-то так.


Время: 03:22.

Время: 03:22.
© OSzone.net 2001-