Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
4 / 8 / 0
Регистрация: 08.02.2013
Сообщений: 52

О сути организации WinAPI

03.04.2013, 15:22. Показов 1854. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вступление.
Есть такие люди, которые могут довольно сносно понимать иностранный язык, но при этом довольно коряво на нём разговаривать или не разговаривать вообще. В том, что касается WinAPI, я как раз из последних не говорящих... Дело происходит так. Беру VS 2010, запиливаю в проект файл типа windows.h, начинаю пытаться писать, но ловлю себя на том, что не понимаю самих внутренних механизмов, самой идеи организации WinAPI. К примеру, в каких-то статьях используют WinMain(); , в иных - wmain (с последней ясно - это для расширенного набора символов), но не это самое страшное. Страшное - в туче, тьме тьмущей #define'ов, о которых Страуструп пишет, что они в большом количестве есть недостаток программиста, и справедливо это аргументирует, приводя в том числе и случай, когда без оных не обойтись.
Проблема в том, что есть тучи примеров WinAPI, но ни один из них не говорит о том, почему именно так, а не иначе, и как это понимать, как это положить в мозги таким образом, чтобы оно легко вынималось. Где-то в сокращениях берут по 3 буквы, где-то по одной, где-то регистр вообще не берут во внимание, а где-то акцентируют им именование... Не говоря при этом о самих принципах построения программ таким образом, чтобы в дальнейшем можно было писать, опираясь только на понимание самой идеи. А между тем, если бы идеи не было, то сами программисты windows совершенно точно не смогли бы создать например C#, кодирование в котором относительно просто по причине довольно продуманной структуры. Они просто терялись бы в собственном коде. Тем не менее, стоит взяться за что-то пониже, поближе к сути - и начинается чехарда... я не въезжаю.
MSDN не даёт такую информацию... нагуглить её тоже довольно сложно - тут просто запроса недостаточно...
В общем, буду благодарен, если кто-то пошлёт, куда надо, покажет, куда идти, чтобы понять, что есть что. И думаю, чо такое окажется полезным для многих здесь.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2013, 15:22
Ответы с готовыми решениями:

Напечатать приглашение всем членам на очередное заседание указанной организации. Задается только вид организации, место и время сбора.
Получить практические навыки использования комбинированного типа данных СТРУКТУРА в разработке приложений. Имеется список...

Виньет каложной сути
Почему некоторые поют? Что они имеют ввиду? Виньет - понятно, мужской род от слова "виньетка", украшение в рукописи. Но что за...

Докопаться до сути TWindowsMediaPlayer
Добрый день (утро, вечер, ночь... :) ). Опишу что делаю и одну из проблем, решить которую так и не удалось. Пытаюсь сделать такую...

19
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
03.04.2013, 15:29
в литературе раскрыты многие "вопросы", Рихтера, Петзольда... читали?
1
4 / 8 / 0
Регистрация: 08.02.2013
Сообщений: 52
03.04.2013, 15:42  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
в литературе раскрыты многие "вопросы", Рихтера, Петзольда... читали?
Пока нет. Присмотрюсь. Спасибо!
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
03.04.2013, 15:52
Почитаете литературу, напишите десяток программ на WinAPI и поймете что к чему.
1
841 / 347 / 68
Регистрация: 20.11.2012
Сообщений: 815
04.04.2013, 19:01
Stranger777, WinAPI это довольно корявый интерфейс с множеством костылей. Во многом из-за требований совместимости версий (так же, как например прикольные форматы сегментных регистров в архитектуре процессоров IA32 с разбросанным по всей структуре полем адреса, например).
WinMain по умолчанию - это вообще точка входа в wincrt library. Можно переопределить и писать хоть EtoMoyaTochkaVhoda()- для студии:
C
1
#pragma comment(linker,"/ENTRY:EtoMoyaTochkaVhoda")
Понять WinAPI и чувствовать себя при его использовании как рыба в воде можно, но для этого нужно понять саму архитектуру операционных систем и архитектуру Windows в частности (тут только М. Руссинович и Д. Соломон, С. Шрайбер помогут вместе с WinDBG). Ну и ранее упомянутый Д. Рихтер. Однако если на чистых "апях" писать нет необходимости, то нужно знать всего лишь 2-3 десятка основных функций, опирающихся на native api и cистемные службы Windows.
Про дефайны - нужно учитывать, что "родной" язык WinAPI - это Си, а никак не C++.
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.04.2013, 17:36
А на сами буквы внимания тоже обращают? Идентификаторы, различающиеся регистром, различаются согласно правилам языка.

Добавлено через 2 минуты
Цитата Сообщение от Stranger777 Посмотреть сообщение
C#, кодирование в котором относительно просто по причине довольно продуманной структуры.
Это там то? И в сравнении с чем же интересно? С программированием ЭНИАКА кабелями и штекерами? Сложнее. С программированием в двоичных опкодах? Тем более. С кодированием на остальной эзотереке? Она проще даже ассемблера, значит пропасть с решёткой в ту же сторону, но ещё больше. Только решётка по настоящему эзотерична и висит высоко над иерархией сложности.

Добавлено через 3 минуты
Цитата Сообщение от Stranger777 Посмотреть сообщение
Они просто терялись бы в собственном коде.
А откуда иначе столько виндоглюков?

Добавлено через 2 минуты
Цитата Сообщение от WhiteP Посмотреть сообщение
Понять WinAPI и чувствовать себя при его использовании как рыба в воде можно, но для этого нужно
изучить венгерский с преподавателем-англичанином, не зная английского.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
11.04.2013, 19:25
WhiteP, и почему же он корявый? Совместимость версий работает на Ура.
И что значит "с разбросанным по всей структуре полем адреса" в архитектуре IA-32 ?
Да и WinMain это не точка входа в "wincrt library", это точка входа в программу пользователя, как и main. Только первое для GUI приложений, а второе для консольных.
Не вводите людей в заблуждение.
0
841 / 347 / 68
Регистрация: 20.11.2012
Сообщений: 815
11.04.2013, 20:41
Цитата Сообщение от lazybiz Посмотреть сообщение
WhiteP, и почему же он корявый? Совместимость версий работает на Ура.
Работает. Но нельзя назвать Windows API удобным и интуитивно понятным. На мой взгляд. А корявый потому, что это обертка на обертке на обертке. При этом куча ответвлений вроде функ с постфиксом Ex.
Цитата Сообщение от lazybiz Посмотреть сообщение
И что значит "с разбросанным по всей структуре полем адреса" в архитектуре IA-32 ?
Во вложении формат дескриптора сегмента. Биты адреса раскиданы в связи с требованиями совместимости.

Цитата Сообщение от lazybiz
Да и WinMain это не точка входа в "wincrt library", это точка входа в программу пользователя, как и main. Только первое для GUI приложений, а второе для консольных.
Не вводите людей в заблуждение.
Да, пардон. Хотел сказать одно, а сказал другое. Это точка, на которую передается управление из стартовой функции в wincrt. Я хотел сказать, что ее название и прототип не имеют никакого значения вне С/С++ и VS С++ в частности, т.к. непосредственная точка входа (т.е. куда попадет управление после загрузки в память) прописана в одном из полей в PE-заголовке.
Миниатюры
О сути организации WinAPI  
1
841 / 347 / 68
Регистрация: 20.11.2012
Сообщений: 815
11.04.2013, 20:55
Цитата Сообщение от taras atavin Посмотреть сообщение
А откуда иначе столько виндоглюков?
Ну в любом приложении есть глюки же. Тем более в проекте такого размера с таким количеством разработчиков.
0
4 / 8 / 0
Регистрация: 08.02.2013
Сообщений: 52
12.04.2013, 01:34  [ТС]
Промежуточные итоги неспешных поисков: http://www.charlespetzold.com/books.html - замечательность ссылки состоит в том, что некоторые книги снабжены простыми работающими примерами с исходниками, прямо с сайта, так что полезным может оказаться многим, кроме меня. Глюки - величайшая проблема всех программистов всех времён - есть и в самих компиляторах. Я всегда полагал, что уж это - то, что должно быть выточено идеальнейшим образом, до мельчайших деталей, а оказывается, что генераторы промежуточного кода и разнообразные анализаторы - по словам самих разработчиков оных - во многом полагаются на этакий авось пространных представлений эвристики. Их бин был разочарован, когда при изучении "Книги дракона" наткнулся на такие печальные строки.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
12.04.2013, 10:46
Цитата Сообщение от WhiteP Посмотреть сообщение
Ну в любом приложении есть глюки же. Тем более в проекте такого размера с таким количеством разработчиков.
Я один тут чего-то не понимаю? О каких-таких "виндо"-глюках идет речь?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 12:25
Ой не могу. Прям он ни разу про глюки винды не слышал.

Добавлено через 3 минуты
Цитата Сообщение от WhiteP Посмотреть сообщение
Ну в любом приложении есть глюки же. Тем более в проекте такого размера с таким количеством разработчиков.
Чего же в лине их нет? Размер не дотянул? Так сокращайте винду. Или разработчиков меньше? А зачем мелкомягких столько понадобилось? Половину перевели бы в прикладное программирование и их было бы меньше. Ах да, они и так сроки срывают. Но почему же у никсописцев нет аналогичных проблем? Может всё таки не в проекте дело, а в команде?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
12.04.2013, 12:30
У нас разговор начинает перетекать из одного русла в другое.
Речь шла о корявости Windows API, а не о том как работает сама ОС.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 12:30
Цитата Сообщение от Stranger777 Посмотреть сообщение
Промежуточные итоги неспешных поисков: http://www.charlespetzold.com/books.html - замечательность ссылки состоит в том, что некоторые книги снабжены простыми работающими примерами с исходниками, прямо с сайта, так что полезным может оказаться многим, кроме меня. Глюки - величайшая проблема всех программистов всех времён - есть и в самих компиляторах. Я всегда полагал, что уж это - то, что должно быть выточено идеальнейшим образом, до мельчайших деталей, а оказывается, что генераторы промежуточного кода и разнообразные анализаторы - по словам самих разработчиков оных - во многом полагаются на этакий авось пространных представлений эвристики. Их бин был разочарован, когда при изучении "Книги дракона" наткнулся на такие печальные строки.
А что удивляться? Компиляторы пишут те же люди, которые потом учат других писать с глюками.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,908
Записей в блоге: 12
12.04.2013, 12:38
Цитата Сообщение от taras atavin Посмотреть сообщение
Чего же в лине их нет?
"Мадемуазель Бриссар - если к Вам не прижимаются в метро, то это вовсе не означает, что метро в Париже не существует" (С) "Ищите женщину"

Не надо про безглючность ОСей, с этими сказками - в HolyWars, там много слушателей. От темы не отклоняемся...
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
12.04.2013, 12:45
Цитата Сообщение от taras atavin Посмотреть сообщение
А что удивляться? Компиляторы пишут те же люди, которые потом учат других писать с глюками.
У тебя очень скудное мировоззрение. Все на самом деле не так как тебя учили.
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
12.04.2013, 12:55
Цитата Сообщение от Stranger777 Посмотреть сообщение
Глюки - величайшая проблема всех программистов всех времён - есть и в самих компиляторах. Я всегда полагал, что уж это - то, что должно быть выточено идеальнейшим образом, до мельчайших деталей, а оказывается, что генераторы промежуточного кода и разнообразные анализаторы - по словам самих разработчиков оных - во многом полагаются на этакий авось пространных представлений эвристики. Их бин был разочарован, когда при изучении "Книги дракона" наткнулся на такие печальные строки.
Парсеры — да, отточены очень хорошо. Оптимизации полагаются на эвристики. Потому что оптимальная компиляция любого Тьюринг-полного языка — это доказанно неразрешимая задача. Неразрешимая алгоритмически — нельзя составить алгоритм, который бы за конечное время гарантированно делал всё оптимальным образом. Не может машина Тьюринга откомпилировать сама себя. Так же, как арифметика не может доказать непротиворечивость самой себя. Тем не менее, отсутствие общего оптимального решения не мешает находить хоть какие-то решения получше.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.04.2013, 16:38
Цитата Сообщение от UI Посмотреть сообщение
Мадемуазель Бриссар - если к Вам не прижимаются в метро, то это вовсе не означает, что метро в Париже не существует" (С) "Ищите женщину"
Допустим. Ну так я и утверждаю, что винда не существует, в другом же месте не прижимаются.

Добавлено через 1 минуту
Цитата Сообщение от lazybiz Посмотреть сообщение
У тебя очень скудное мировоззрение. Все на самом деле не так как тебя учили.
Николас Вирт написал книгу по паскалю, я по ней учился писать. Что не так?
0
4 / 8 / 0
Регистрация: 08.02.2013
Сообщений: 52
14.04.2013, 17:22  [ТС]
taras, фраза была употреблена в том смысле, что если ошибки не на поверхности - это не значит, что их нет в принципе. Вообще, как ни старайся, на самом деле большую программу без ошибок написать трудно. Сортировки, массивы и прочая чешуя - это элементарно, но как только попытаешься построить сколько-нибудь богатый набор классов - косяки становятся неизбежными, просто потому, что человек по природе своей не идеален. И один думает - хорошо будет так и это очевидно, а другой - эдак, а в результате у семи нянек дитя без глаза. Та же спецификация PE от Microsoft - поставляется без гарантии полной корректности, хотя казалось бы - достаточно просто не лениться последовательно документировать формат.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
16.04.2013, 07:02
Ну лажа с форматами - это отдельная история, иногда описаловки двух не совместимых форматов одного автора с одним расширением оказываются просто перепутаны, но чтоб это понять, надо открыть хексом, или блокнотом файл, сохранённый оригинальной приладой. Но объясните мне, какое это имеет отношение к проге? Если я в текстовике запишу координаты дачи посреди озера, или реки, так в реале дом на этой даче станет кривым? Читайте исходник, вытаскивайте оттуда все форматы и соглашения. Но в винде даже это не возможно.

Добавлено через 5 минут
А чтоб по-настоящему понять WinAPI, надо не зная английского с преподавателем-англичанином изучить венгерский. Иначе идея на языке с явной типизацией давать всему подряд префиксы останется неясной.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2013, 07:02
Помогаю со студенческими работами здесь

Хочу добраться до сути
И снова здраствуйте друзья) Всех с прошедшими праздниками) Снова прошу помощи у вас. Не могу разобраться в задании, вернее не могу...

Не могу понять сути алгоритма
Как то неловко спрашивать, Но может пожете расшифровать. Не могу понять сути алгоритма.

Не понимаю сути задания и реализацию
Отформатировать файл с программой на языку С: расставить недостающие пробелы. (Вокруг арифметический операций, операций присваивания, при...

Убернуб не понимает сути производных
Я не понимаю сути производной. Допустим итерация x равна 1. Если взять функцию y=x, то производная будет равна 1, тут все в принципе...

Не понимаю сути AObject * (*create)()
Есть абстрактный класс AObject В нём есть метод static int registerClass(AObject * (*create)()); Вот сам метод static int...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru