Форум программистов, компьютерный форум CyberForum.ru

CLI и GUI приложение - в чем разница? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать функцию, определяющую среднюю месячную заработную плату рабочего http://www.cyberforum.ru/cpp-beginners/thread1094749.html
кому не сложно сделайте задачу не успеваю немного Написать функцию, определяющую среднюю месячную заработную плату рабочего, если известно его заработная плата за каждый месяц. Необходимые функции: • ввод данных; • вывод массива данных; • проверка правильности введенных данных; • вычисления суммы заработной платы; • вычисления среднего значения заработной платы;
C++ Ошибка pow: DOMAIN error При запуске в C++ Builder функция спамит вышеуказанной ошибкой, в выводе все значения при (i-j)<0 забиты значением INF, при (i-j)>0 выводятся числа, но весьма далёкие от верных результатов. Пробовал обойти через ab=eln(a)*b и через a-b=1/ab, но результаты выдаёт схожие. Подскажите нубу, в чём может быть проблема. void Matrix (TMatr a) { int i,j; for (i=0;i<n;i++) for (j=0;j<n;j++) ... http://www.cyberforum.ru/cpp-beginners/thread1094743.html
Как пропарсить строку типа "43/12" C++
как пропарсить строку типа "43/12", причем 43 и 12 интовые поля, а / - charовское.
Создать класс “Квартира”, состоящей из класса ”Жильцы” C++
Создать класс “Квартира”, состоящей из класса ”Жильцы”. Класс “Квартира”: улица, номер, телефон. Класс “Жильцы”: Фамилия, год рождения, пол. Вывести всех пенсионеров и их местожительство.
C++ Вывести график функции в консоли http://www.cyberforum.ru/cpp-beginners/thread1094706.html
Здравствуйте. Я пишу программу. Нужно вывести график функции в консоли. Помню, писал на Dev-C++ это. Там был хедер graphics.h(простой был. Писать на нем - одно удовольствие). В VS я не нашел. Есть какой-то GdiPlusGraphics.h. Но это, походу, не то. Какими средствами можно написать программу? Чтобы было красиво и "писабельно".
C++ Что такое #, include, что это означает ______ подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
12.02.2014, 17:00     CLI и GUI приложение - в чем разница?
А, ну ладно. А теперь поделюсь наблюдениями. Может, когда-нибудь ТС вернётся к этой теме.

Значит применительно к наличию консоли, можно и правомерно делить экзешники на две группы- консольные и НЕконсольные. Консольные это те, кто имеют консоль. То есть по запуску она создасться. НЕконсольные это те, кто консоли не имеют. ТО есть по запуску она не создастся. Всё.

GUI тоже неплохо входит в это определение, но именно входит. (Наличие графического интерфейса не является основополагающим для понятийного аппарата, который мы сейчас вводим). Это значит, что консольные приложения МОГУТ иметь графический интерфейс- то самое окно с рюшечками, а могут и не иметь. Также и неконсольные, могут и иметь, а могут и не иметь GUI. Теперь зачем это всё нужно:

1) Консольные без GUI- это то, с чего все начинают программировать. Это пресловутый "hello, word" и прочая. Это мощные и не очень консольные проги- да что далеко ходить, тот же компилятор gcc

2) Консольные с GUI, то есть по работе экзешника создаётся и консоль и GUI. Редко где применяется (инсталлятор MASM). Но я извращенец тот ещё и часто такие проги кропаю вот зачем: я иногда кропаю приложения с GUI (графическим интерфейсом) на ассемблере и их приходится отлаживать. Выводить отладочные надписи в консоль- самое то, вот зачем нужна консоль. Когда приложение сделано и его отлаживать не надо, консоль можно убрать. (Тут важно не путать с консольной программой у которой есть графическая оболочка. Например, архиватор Rar.exe консольный. Но автор решил, что пусть у Rar.exe будет графическая оболочка- и создал экзешник WinRar.exe, который по сути есть графическая оболочка консольного Rar.exe)

3) Неконсольные с GUI- тот же браузер

4) Неконсольные без GUI-это экзешники, у которых нет какого-либо окна- ни графического, ни консоли. Видать, надо так их создателям. Это, конечно вири; всякие служебные программы, коих у тебя работает множество на компе.

//++++++++++++++++++++++++++++++++++++++++++++++

Какой фактор влияет на то, консольное приложение или нет?

Веришь или нет, но фактически это всего лишь один байт. В экзешнике есть часть, называемая заголовком, где хранится всякая служебная информация. И в этой части существует один байт, который и отвечают, за то, будет этот экзешник консольным или нет. Если у этого байта значение 2, вот так:

02- то приложение НЕконсольное
03- то приложение консольное

Вот и всё. А как ты указываешь компилятору- а ну, как сделай мне консольное приложение (то есть сделай в нужном месте 03)? А вот так- ищешь всякие нужные свойства проекта. Джефри Рихтер написал, что можно указывать ключ компиляции /SUBSYSTEM:CONSOLE; Так, а для другого компилятора, коим пользуюсь я (gcc) ключи будут такие:

-mwindows- кропается НЕ консольное приложение. Если этого ключа нет, то кропается консольное приложение.

Но всё эти способы в конечном итоге определяют один байт в экзешнике, каким он будет- 02 или 03 Всё.

Так, а будет или нет у экзешника GUI ты определяешь сам. Если ты напишешь соответствующий код (который создаёт графическое окно- в смысле НЕ консольное), будет GUI, не напишешь, не будет. Если тебе предлагают создать приложение GUI, это всего-навсего значит, что тебе предлагают за тебя написать код создания графического окна. Сервис тык скыть.

//++++++++++++++++++++++++++++++++++++++++++++++

Ну и прикола ради ты можешь взять какое-нибудь приложение GUI- тот же браузер и поменять у него значение нужного байта с 3 на 2. После этого приложение станет консольным- в моём понимании, которое я тебе и предлагаю. Поменяешь обратно- консоль при запуске браузера не будет создаваться.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <windows.H>
#include <stdio.H>
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))
typedef IMAGE_OPTIONAL_HEADER OptionalHeader; 
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Эта функция будет находить нам размер файла и его возвращать. 
long int razmer_faila (char* falis_name) {
 
 long int Razmer_Faila;
 HANDLE hFile;
 
 hFile = CreateFile(falis_name,
                       0,
                     FILE_SHARE_READ, 
                     NULL,
                     OPEN_EXISTING, 
                     FILE_ATTRIBUTE_NORMAL, 
                     NULL);
 
 //Проверяем, нормалено файл открыт или нет
 if (hFile== INVALID_HANDLE_VALUE) {
  return 0;
 }
 Razmer_Faila= (long int)GetFileSize(hFile, 0);
 CloseHandle (hFile);
 return Razmer_Faila; 
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
 
int main (int agrc, const char* argv[]) {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
                               //+ + +
 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!перегоняем файл в строку!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 char falis_name [MAX_PATH];
 long int Razmer_Faila;
 
 if (agrc!= 3) {
  printf ("Количество аргументов должно быть 2");
  return 1;
 }
 
 //Первое, что сделааем, это введём имя файла, который будем перегонять в строку:
 strcpy (falis_name, argv[1]);
 
 
 //Теперь находим размер файла
 if (!(Razmer_Faila= razmer_faila (falis_name))) {
  printf ("не получилось найти размер экзешника\n");
  return 1;
 }
 
 
 //Теперь открываем файл на чтение
 FILE* f;
 if (!(f= fopen (falis_name, "rb"))) {
  printf ("экзешник на чтение не открыт\n");
  return 1; 
 }  
 
 //Теперь переписываем файл в строку нужного размера. ДЛя этого такую строку надо выделить
 //unsigned char* stroka_dla_faila= new unsigned char [Razmer_Faila+ 1]; 
 unsigned char* stroka_dla_faila= new unsigned char [Razmer_Faila]; 
 
 
 //И собсно запись файла в эту строку
 if (fread (stroka_dla_faila, 1, Razmer_Faila, f)<Razmer_Faila) {
  printf ("не удалось считать экзешник в строку\n");
  return 1;
 }
 
 fclose (f);
 
 
 //Потом не забыть вернуть память оси с помощью delete 
 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!конец перегоняем файл в строку!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 PIMAGE_NT_HEADERS pPE=(PIMAGE_NT_HEADERS)NTSIGNATURE((long)stroka_dla_faila);
 
 if (!(strcmp(argv[2], "y")))
  pPE->OptionalHeader.Subsystem= 3;
 else 
  if (!(strcmp(argv[2], "n")))
   pPE->OptionalHeader.Subsystem= 2;
  else {
   printf ("Вторым параметром должно быть 'y' или 'n'\n");
   return 1;
  }
 
 
 
 //Перегоним строку в файл
 if (!(f= fopen (falis_name, "wb"))) {
  printf ("файл на запись не открыт\n");
  return 0; 
 }  
 
 fwrite (stroka_dla_faila, 1, Razmer_Faila, f); 
 delete [] stroka_dla_faila;
 fclose (f);
 return 0;
}
работать так: бросаешь в одну папку с ra.exe файл firefox.exe (это браузер, можешь что-нибудь другое) и командуешь
Bash
1
ra.exe firefox.exe y
Теперь по запуску firefox.exe увидишь консоль, только не забудь, прежде чем ткнуть на него вернуть его в прежнюю директорию. Не захочешь консоль, командуй

Bash
1
ra.exe firefox.exe n
И всё, firefox.exe снова стал неконсольным приложением, каким и был.
 
Текущее время: 22:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru