Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.91
YusipovIlsur
11 / 11 / 2
Регистрация: 17.12.2010
Сообщений: 52
#1

Преимущество Win Api - C++

04.10.2011, 07:54. Просмотров 3020. Ответов 22
Метки нет (Все метки)

Буквально вчера создал тему, где задал вопрос о средствах, с помощью которых можно работать некоторым образом в командной строке. Нашлось много ответов, и часть из них сводилась к совету использовать средства Win Api. И, собственно, теперь сам вопрос:
На сколько это перспективно (если можно так сказать), и почему лучше начать работать именно с Win Api, а не, скажем, выучить библиотеку QT и писать на более высоком уровне? Или наоборот, лучше взяться за какую-нибудь среду разработки и изучить все предоставляемые ею возможности? Насколько это вообще "благодарное" дело работать с Win Api, и насколько больше его потенциал? [Надеюсь, что грамотно задал вопрос]

*Очень хотелось бы получить наиболее объективный ответ от людей, которые работали (работают) и с тем, и с тем. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 07:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преимущество Win Api (C++):

WIN API - C++
Доброе время суток. Учусь в институте и дали сделать такую хрень: Реализовать приложения Win32API: 1. Окно в центре экрана с фоном...

WIN API, кодировка - C++
Доброго времени суток! Вот если написать: MessageBox(NULL,(LPCWSTR) "Тест",(LPCWSTR)"Системное сообщение", MB_OK); выведется...

Потоки win api - C++
Здравствуйте. Такое задание: необходимо написать программу, которая в главном потоке создает дополнительный поток, и уже в нем...

win api точки входа - C++
меня интересуют названия функция получения точки входа файла получения конца файла (feof не подойдёт) и функция изменения точки входа. ...

Построение графика в Win Api - C++
Требуется построить график по точкам. Все координаты даны. Не могу найти в пространстве интернета, с помощью каких функций это можно...

DrawText win api - Мистика =) - C++
Начинал изучать C++ на FreeBSD, собирал мейкфайлы и горя не знал. Полез в винде разбираться с её API, и начался дурдом. Вот код. Интересует...

22
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
04.10.2011, 08:48 #2
YusipovIlsur,
1. Если ты используешь Qt, MFC или любую другую библиотеку под windows, никто тебе не мешает в той же программе использовать winAPI.
2. winAPI дает самые широкие возможности для работы с windows. В надстройках есть реализации далеко не для всего функционала операционки. То есть некоторые вещи ты можешь сделать только на winAPI.
3. В любой программе или библиотеке есть косяки. Когда ты работаешь с winAPI ты юзаешь только косяки winAPI, а когда используешь другие библиотеки то косяки winAPI+косяки библиотеки. Ведь в конечном итоге все эти библиотеки используют winAPI.
4. Конечно у winAPI есть недостаток: в библиотеках многие вещи делаются проще чем через winAPI, для того эти библиотеки и нужны.

Вывод: Используй библиотеки, а где надо winAPI.
1
ITDeveloper
85 / 85 / 5
Регистрация: 14.01.2011
Сообщений: 265
04.10.2011, 09:13 #3
Функции WinApi - это функции непосредственно самой операционной системы. Следовательно используя только WinApi без сторонних библиотек будет выйгрышь в надежности и стабильности кода, его скорости, а так же меньше проблем с переносом программы (проекта) на другие машины.
1
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
04.10.2011, 10:05 #4
YusipovIlsur, сильно зависит от того, чем собираетесь заниматься. Если кроссплатформенность для вас пустое слово, приложения будут исключительно под винду + не пугает написание порой довольно громоздких и сложных конструкций ради получения как бы более быстрого кода, это при условии, что наделаете гарантированно меньше ошибок, чем разработчики популярных оконных библиотек, то winapi - ваш выбор!
1
ITDeveloper
85 / 85 / 5
Регистрация: 14.01.2011
Сообщений: 265
04.10.2011, 10:23 #5
Конечно, используя WinApi, никакой кроссплатформенности не будет. А по поводу хороших библиотек хочется уточнить, что многие из них платные. Соглашусь с YusipovIlsur, что все зависит от того, что хотите сделать в итоге!
1
YusipovIlsur
11 / 11 / 2
Регистрация: 17.12.2010
Сообщений: 52
04.10.2011, 17:12  [ТС] #6
Ну, в целом картина ясна. Пожалуй, совместное использование тех и других средств - наиболее правильный вариант, для написание не особо специализированных программ.
Всем огромное спасибо, за участие в обсуждении! (=
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.10.2011, 17:27 #7
На WinAPI писать невозможно, код абсолютно нечитаем.
Для примера(выдрал из инэта):
C++
1
2
HANDLE Com2Port; 
Com2Port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0, NULL,OPEN_EXISTING,0,NULL);
Во-первых, такая запись проста ужасна из-за большого количества параметров.

Во-вторых, может показаться, что этот код создает файл. Но нет, функция CreateFile настолько универсальна, что в данном случае используется для получения указателя на порт. Круто, правда?
0
alkagolik
Заблокирован
04.10.2011, 17:34 #8
YusipovIlsur, да все просто. winAPI это системные вызовы ОС. Например чтение\запись ключей реестра без winapi реализовать вроде как нельзя, а вся конфигурация (да и вообще всё) хранится именно там, следовательно и к железу напрямую вы не сможете обратиться без winapi. Окошки там всякие, менюшки это на выбор... рисованием заниматься ))

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
такая запись проста ужасна из-за большого количества параметров
это еще цветочки
0
Bers
Заблокирован
04.10.2011, 18:21 #9
Цитата Сообщение от diagon Посмотреть сообщение
Во-первых, такая запись проста ужасна из-за большого количества параметров.
Меньшее количество параметров - более кастрированный функционал.
Ничто не мешает сделать мини-обёртку над функцией, если стабильно требуется каждый раз заполнять некоторые аргументы одними и теми же данными.


Цитата Сообщение от diagon Посмотреть сообщение
Во-вторых, может показаться, что этот код создает файл. Но нет, функция CreateFile настолько универсальна, что в данном случае используется для получения указателя на порт. Круто, правда?
А вы думали, что файл - это только поименованная область на жестком диске?
Файл - абстрактное понятие. Это - хранилище данных, которое может быть источником или приёмником данных.

Создан специально для того, что бы можно было абстрагироваться от конкретного физического устройства - жесткого диска, принтера, ком-порта и тп.

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

Если раньше вы все время думали, что файл - это всякие документики аля Student.txt на вашем жестком диске, то это не проблема имени функции, а проблема вашей недообразованности.

А что касается читаемости - ну меня лично напрягает венгерская нотация. А так в общем то.. все вполне себе читается...
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.10.2011, 19:45 #10
Цитата Сообщение от Bers Посмотреть сообщение
Меньшее количество параметров - более кастрированный функционал.
Ничто не мешает сделать мини-обёртку над функцией, если стабильно требуется каждый раз заполнять некоторые аргументы одними и теми же данными.
Более логичной была бы функция, которая принимала бы только один параметр - имя файла.

Цитата Сообщение от Bers Посмотреть сообщение
А вы думали, что файл - это только поименованная область на жестком диске?
Файл - абстрактное понятие. Это - хранилище данных, которое может быть источником или приёмником данных.
Создан специально для того, что бы можно было абстрагироваться от конкретного физического устройства - жесткого диска, принтера, ком-порта и тп.
В вашем примере, создаётся файл, который будит связан с "физическим устройством" - ком-порт.
Вы на руки получаете описатель созданного файла, с помощью которого можно будит пересылать данные.
Ничего при этом не создается.
И настораживает в CreateFile не File, а Create. Это-то слово вполне однозначно, разве нет?
И вообще, чем более универсален код, тем сложнее его применять на практике.
WinAPI слишком универсален, писать программы на нем также приятно, как и на ассемблере. И, как и ассемблер, он морально устарел. Бывают, конечно, области где без него не обойтись...
Но имхо использования WinAPI следует избегать, пока это возможно.
Как минимум из-за непереносимости.
0
Bers
Заблокирован
04.10.2011, 19:56 #11
Цитата Сообщение от diagon Посмотреть сообщение
Более логичной была бы функция, которая принимала бы только один параметр - имя файла.
Получим очень очень частный случай.
Потом захотим, что бы файл имел дополнительные параметры, потом ещё какие то. И что? Предлагаете Майкрософт написать 100500 разных перегрузок одной и той же функции для всех случаев жизни? И поддерживать их все? Или все таки одну, универсальную?

Система должна подстраиваться под 100500 клиентов, или клиенты под систему?
Библиотека должна подстраиваться под каждого пользователя, или каждый пользователь сам обеспечит себе все необходимое штатными средствами библиотеки?

Добавлено через 5 минут
Цитата Сообщение от diagon Посмотреть сообщение
Ничего при этом не создается.
И настораживает в CreateFile не File, а Create. Это-то слово вполне однозначно, разве нет?
Возвращаемый HANDLE указывает в никуда? Или все таки на какие то внутренние данные, которые были созданы в системе специально по вашему запросу?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.10.2011, 20:06 #12
Цитата Сообщение от Bers Посмотреть сообщение
Система должна подстраиваться под 100500 клиентов, или клиенты под систему?
Первое. Ибо если система не понравиться клиентам, то клиенты выберут другую систему. Что многие и сделали...


Цитата Сообщение от Bers Посмотреть сообщение
Потом захотим, что бы файл имел дополнительные параметры, потом ещё какие то.
Сделать другую функцию, которая меняет права файла.
Функции должны делать то, что должны. Функция, создающая файл, не должна делать что-либо еще.


Цитата Сообщение от Bers Посмотреть сообщение
Возвращаемый HANDLE указывает в никуда? Или все таки на какие то внутренние данные, которые были созданы в системе специально по вашему запросу?
Указывает, но никак не на созданный файл.
0
Bers
Заблокирован
04.10.2011, 20:11 #13
Цитата Сообщение от diagon Посмотреть сообщение
Первое. Ибо если система не понравиться клиентам, то клиенты выберут другую систему. Что многие и сделали...
Ну.. тогда ищите что нибудь получше.


Цитата Сообщение от diagon Посмотреть сообщение
Сделать другую функцию, которая меняет права файла.
Функции должны делать то, что должны. Функция, создающая файл, не должна делать что-либо еще.
А что ещё по вашему делает функция создания файла, кроме создания файла?


Цитата Сообщение от diagon Посмотреть сообщение
Указывает, но никак не на созданный файл
На что указывает?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.10.2011, 20:18 #14
Цитата Сообщение от Bers Посмотреть сообщение
Ну.. тогда ищите что нибудь получше.
Да я уже давно нашел...) Qt/java


Цитата Сообщение от Bers Посмотреть сообщение
что ещё по вашему делает функция создания файла, кроме создания файла?
В данном случае устанавливает права на файл, принимает переменную, указывающую, создавать ли файл при его отсутствии(вполне логичный параметр, да), атрибуты и еще несколько абсолютно лишних параметров.
Цитата Сообщение от Bers Посмотреть сообщение
На что указывает?
Ну, если следовать вашей терминологии, то на уже созданный файл.
Но как-то не ассоциируется у меня порт с файлом, хоть убей.
0
Bers
Заблокирован
04.10.2011, 21:40 #15
Цитата Сообщение от diagon Посмотреть сообщение
В данном случае устанавливает права на файл, принимает переменную, указывающую, создавать ли файл при его отсутствии(вполне логичный параметр, да), атрибуты и еще несколько абсолютно лишних параметров.
Вы получаете описатель файла, который для вас создаёт система где то в своих недрах.
Допустим, вы хотите создавать файл вот так:

описательФайла = СоздатьФайл(имя);

А режим работы файла (считай устройства), задавать позднее при необходимости:

УстановитьРежим(описательФайла, режим);


что делать, если реальное устройство таково, что задать режим его работы можно только в момент создания файлаУстройства, а позднее создавать нельзя?

Добавлено через 15 минут
Можно например, пойти таким путём:

описательФайла = СоздатьФайлПринтера(имя, режимПринтера);
описательФайла = СоздатьФайлТекстовый(имя);
и тп.

Но ведь реальные устройства могут быть нестандартными. Как тогда быть со всеми этими сеттерами и геттерами?
Писать для кождого устройства свои наборы?

ИзменитьРежимПринтера()
ИзменитьРежимТекстовогоФайла()
изменитьРежимКомПорта()
и тд?

Вы представляете себе какое количество функций придётся написать, и сколько их придётся поддерживать?


Что значит для крупного проекта добавление всего одной функции?
Я сам по опыту не знаю. Но читал из книг, что это что-то такое:
- изменения во всех документах проекта (работа руководителей проекта)
- изменения в архитектуре (не всегда, но если имеет место быть - стоимость функции взлетит многократно)
- изменение модуля, в который вводится функция (оплата высокооплачиваемых специалистов)
- тестирование модуля, тестирование всех модулей которые хоть как то могут быть связанны с модифицированным.

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

В общем, чем лаконичнее и минималистичнее интерфейс, тем ниже в нем вероятность ошибок, он проще и дешевле и в разработке, и в сопровождении.

Поэтому, если вы сделаете мини-обёртку над функцией винапи для собственного же удобства - вам это будит стоить копейки.
Если Майкрософт для вашего удобства будит делать дополнительную функцию - ей это будит стоить тысячи рублей.
А поскольку Майкрософт одна, а вас - клиентов, очень много, и каждый со своим прибабахом, то Майкрософт решили сделать максимально минималистичный, но в тоже время универсальный интерфейс, что бы каждый мог пользоваться по своим потребностям. Кому не нравится - те могут пользоваться библиотеками, типа кьют, которые на самом деле - всего лишь надстройки над интерфейсами ОС.
1
04.10.2011, 21:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2011, 21:40
Привет! Вот еще темы с ответами:

Win Api ошибка undefined reference to - C++
пишу функцию BOOL OnCreate(HWND hwnd,LPCREATESTRUCT) { HDC hdc; hBitmap=(HBITMAP)LoadImage(NULL, "IMG.bmp",IMAGE_BITMAP, 0,...

Глобальное считывание комбинаций win api - C++
Всем привет, есть такая штука как autoHotKey смысл ее действия это считывать нажатия клавиш или комбо, и запускать определенные действия...

Копирование файлов без win api - C++
Добрый день. Что прошу: Мне нужно выполнить копирование моего (ехе) в определенные директории - папки. Мне подсказали что можно...

win API:найти информацию о логических дисках. - C++
Определить типы логических дисков, обьём диска, колличество секторов в клястере, тип драйвера.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru