Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос про SetWindowLong() 
:(
    Опции темы
GremlinProg
Дата 4.4.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



я вижу, ты просто не до конца понял фразы:
Цитата(GremlinProg @  4.4.2009,  16:52 Найти цитируемый пост)
получается, ты рекомендуешь майкрософту придерживаться стандарта, который соблюсти невозможно?

синее - ключевое

дело не в старости кода на Си, этому языку уже много лет, и его концепции со временем только укрепляются и примеры тому - подавляющее большинство C-подобных инструментов

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

дело в том, что соблюсти стандарт невозможно из-за того, что интерфейс Get/SetWindowLong - это узкое горлышко, через которое проходит разнородная информация

чтобы следовать букве закона, в данном случае потребуется ввести массу специализаций одного метода:
GetWindowLong
GetWindowVoid
GetWindowWndProc
GetWindowModule
GetWindowID
GetWindowMenu
и т.п., причем некоторые, на самом деле, так и реализованы, и подозреваю - только для удовлетворения общих правил
но что делать с "application-defined value", в таком случае?

Шаблонов в API нет до сих пор, и появиться они могут только совместно с их компоновкой в реальном времени , т.е. API должна будет поставляться совместно и со всеми инструментами разработчика, а это просто противоречит ее назначению

ps: частные специализации шаблонов я не рассматриваю, при их экспорте - это конечные функции, с заведомо решенными типами данных


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Anikmar
Дата 4.4.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 59



Цитата(GremlinProg @  4.4.2009,  16:12 Найти цитируемый пост)
дело в том, что соблюсти стандарт невозможно из-за того, что интерфейс Get/SetWindowLong - это узкое горлышко, через которое проходит разнородная информация


Теперь переместились ближе к виндам  smile 

Мы уклонились от предмета спора. Get/SetWindowLong не нарушает стандарт С тем, что указатель передается через int32. Ограничивают совместимость, но не более - в висте будет int64.
API - это отдельная тема - соглашение о вызовах системы и не более. Попытка привязать прерывания DOS к стандарту ни к чему бы не привела. WinAPI и C++ совершенно разные вещи и требовать от первой поддержки стандарта С++ глупо - это внеязыковая среда.

Спор идет о стиле программирования С++, даже если это касается вызовов WinAPI. 
Цель разработчиков системы предоставить интерфейс для каждого языка, через который можно обращаться к системным функциям. Именно для этого и есть некая библиотека, вызывая функции которой мы обращаемся к API. Задача разработчиков этой библиотеки сделать ее таким образом, чтобы отвечала требованиям языка, к которому она относится. Соответственно появляется файл windows.h, в котром прописаны интерфейсы вызовов.

Я всего лишь говорю о том, что программисту С++ не надо по большому счету знать бинарный код вызова - сколько байтов куда и для чего. Он знает хидер, в котором четко прописан прототип, а также у него есть библиотека, которая к хидеру относится. Задача программера - правильно вызвать функцию согласно прототипа. Только и всего. Вот я за это и ратую.

И если в хидере написан параметр void* - то не стоит передавать int. Просто выполнять правила и все.
Если требуется передать указатель, который к тому же четкого размера - то в хидере указывается dword (заметьте, не int и не long) - т.е. привязка к конкретной платформе, в которой указатель 32 бита и все тут. Жестко.
Код С++ (не бинарный, а исходный, разумеется), написанный максимально вежливо - будет максимально быстро переносится на другую платформу вот и все, что я хотел собственно выразить.

Цитата(GremlinProg @  4.4.2009,  16:12 Найти цитируемый пост)
чтобы следовать букве закона, в данном случае потребуется ввести массу специализаций одного метода:

Совершенно не нужно, по крайней мере для С++. Это достаточно гибкий язык. Лишнего городить не надо.

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

Оба мнения совершенно разумны и каждый из нас естественно останется при своем. Начинающие программисты, посмотрев наш спор придут к тому или иному мнению и решат для себя лично как им действовать.
 smile 
PM MAIL ICQ   Вверх
GremlinProg
Дата 4.4.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



ну, спорить мне тоже уже не интересно,

резюме поддерживаю, и считаю, что аргументы со своей стороны я защитил, учитывая, в каком разделе форума мы находимся




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
yngwie19
Дата 4.4.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Ребят Вы тут постоянно упоминиете некий "Стандарт", Я тат понимаю это про описание самого C++. Можно его на русском где-то почитать?
PM MAIL   Вверх
Anikmar
Дата 4.4.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 59



Цитата(GremlinProg @  4.4.2009,  17:53 Найти цитируемый пост)
ну, спорить мне тоже уже не интересно,

резюме поддерживаю, и считаю, что аргументы со своей стороны я защитил, учитывая, в каком разделе форума мы находимся


Аналогично. Лучше найдем другую тему для спора.  smile. (Только не goto!)  smile 

Цитата(yngwie19 @  4.4.2009,  18:31 Найти цитируемый пост)
Ребят Вы тут постоянно упоминиете некий "Стандарт", Я тат понимаю это про описание самого C++. Можно его на русском где-то почитать? 

Почему некий? Есть стандарт ANSI сейчас готовится новый. По сути - арбитр в спорах, хотя достаточно много узких мест и необнозначностей. На русском у меня нет, на английском есть, но неудобный - pdf с защитой.
PM MAIL ICQ   Вверх
yngwie19
Дата 5.4.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Anikmar, а вообще на русском его в инете достать можно?
PM MAIL   Вверх
Anikmar
Дата 5.4.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 59



Цитата(yngwie19 @  5.4.2009,  09:08 Найти цитируемый пост)
Anikmar, а вообще на русском его в инете достать можно? 

Не знаю. Поищите, может и найдете.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.