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

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

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

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

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

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

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

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

19
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
03.04.2013, 15:29 2
в литературе раскрыты многие "вопросы", Рихтера, Петзольда... читали?
1
4 / 8 / 0
Регистрация: 08.02.2013
Сообщений: 52
03.04.2013, 15:42  [ТС] 3
Цитата Сообщение от Jupiter Посмотреть сообщение
в литературе раскрыты многие "вопросы", Рихтера, Петзольда... читали?
Пока нет. Присмотрюсь. Спасибо!
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
03.04.2013, 15:52 4
Почитаете литературу, напишите десяток программ на WinAPI и поймете что к чему.
0
836 / 343 / 67
Регистрация: 20.11.2012
Сообщений: 795
04.04.2013, 19:01 5
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
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.04.2013, 17:36 6
А на сами буквы внимания тоже обращают? Идентификаторы, различающиеся регистром, различаются согласно правилам языка.

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

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

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

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

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

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

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

Добавлено через 5 минут
А чтоб по-настоящему понять WinAPI, надо не зная английского с преподавателем-англичанином изучить венгерский. Иначе идея на языке с явной типизацией давать всему подряд префиксы останется неясной.
0
16.04.2013, 07:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2013, 07:02
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru