Воистину, типобезопасность для багобоязненных!
Написал я недавно такое трехстишие:
Компилятор послушал его и принял без единого замечания. Но шайтан-машина вместо нужных строк изобразила такое:

Мне тут недавно некоторые советовали на WinAPI писать, и порой, в плагинах, этим таки приходится заниматься. Microsoft, милостивый, милосердный, послал страждущим заголовочный файл "Windowsx.h" с набором макросов вроде этого ComboBox_AddString, но если всякие винапишные функции чтут различение между юникодом и неюникодом, и компилятор не дает туда просто так отдать строку не в том формате, то эти макросы занимаются бесстыдными кастами, нисколько не заботясь о типах переданных значений. В результате тут ансишная строка была трактована как юникодная, английский текст стал китайским.
12. И те, кто не уверовал (в строгую типизацию), верующим говорят: "Вы следуйте по нашему пути, И понесем грехи мы ваши на себе!" Но ничего из их грехов они не понесут - Лжецы они, и только!
13. Нести им бремя собственных (грехов) И груз (грехов за совращение душ ближних), Что ляжет грузом на их груз. В День Релиза их спросят За (ложь всего) измышленного ими.
43. Вот притчи, что Мы людям предлагаем, Но внемлют им лишь те, кто сведущ.
Написал я недавно такое трехстишие:
ComboBox_AddString(combo, "Source Max"); ComboBox_AddString(combo, "Source Average"); ComboBox_AddString(combo, "Source Median");
Компилятор послушал его и принял без единого замечания. Но шайтан-машина вместо нужных строк изобразила такое:

Мне тут недавно некоторые советовали на WinAPI писать, и порой, в плагинах, этим таки приходится заниматься. Microsoft, милостивый, милосердный, послал страждущим заголовочный файл "Windowsx.h" с набором макросов вроде этого ComboBox_AddString, но если всякие винапишные функции чтут различение между юникодом и неюникодом, и компилятор не дает туда просто так отдать строку не в том формате, то эти макросы занимаются бесстыдными кастами, нисколько не заботясь о типах переданных значений. В результате тут ансишная строка была трактована как юникодная, английский текст стал китайским.
12. И те, кто не уверовал (в строгую типизацию), верующим говорят: "Вы следуйте по нашему пути, И понесем грехи мы ваши на себе!" Но ничего из их грехов они не понесут - Лжецы они, и только!
13. Нести им бремя собственных (грехов) И груз (грехов за совращение душ ближних), Что ляжет грузом на их груз. В День Релиза их спросят За (ложь всего) измышленного ими.
43. Вот притчи, что Мы людям предлагаем, Но внемлют им лишь те, кто сведущ.
no subject
Date: 2014-07-11 08:18 am (UTC)no subject
Date: 2014-07-11 12:16 pm (UTC)А разве компилятор предупреждения не выдал?
no subject
Date: 2014-07-11 12:36 pm (UTC)no subject
Date: 2014-07-11 01:29 pm (UTC)no subject
Date: 2014-07-11 04:04 pm (UTC)Ты неправильно выбрал инструмент, на WinAPI с макросами в 2014-м году так себе идея.
Для тех задач, для которых 10-15 лет назад использовался чистый WinAPI, начиная года с 2005 следует использовать ATL+WTL.
Если бы ты его использовал, вызвал бы типобезопасный CComboBoxT::AddString.
В отличие от монструозного MFC, ATL+WTL очень лёгкая header-only обёртка над Win32 API, которая тем не менее сильно упрощает создание GUI.
Кстати там тоже навалом макросов — только макросы из ATL, в отличие от макросов из Windowsx.h, типобезопасность почему не ломают – попробуй передать в тот макрос значение не того типа и ничего не скомпилируется.
no subject
Date: 2014-07-11 04:40 pm (UTC)no subject
Date: 2014-07-11 05:00 pm (UTC)Халяльное.
WTL придумали в Microsoft, сделали в Microsoft, и он до сих пор поддерживается и развивается силами Microsoft.
Основная причина, почему оно не в SDK — для решения похожих задач уже есть MFC, несколько разных managed GUI библиотек, и новый C++/CX с XAML.
Поэтому Microsoft не очень понятно, зачем тратить много денег ещё и на WTL, это ж бизнес, а не благотворительность.
no subject
Date: 2014-07-11 05:26 pm (UTC)Про то как WTL поддерживается и развивается: пару месяцев назад выходило так, что последняя версия была 7 лет назад. В этом мае внезапно вышло обновление, неожиданность.
no subject
Date: 2014-07-11 05:50 pm (UTC)В WTL очень мало кода и мало зависимостей. Например, вся реализация CComboBoxT — 360 строк.
Ты их даже скопипастить можешь к себе в проект, он зависит только от ATL, который конечно прекрасно поддерживается и документирован.
WinAPI пожалуй самый стабильный API в мире и давно перестал развиваться — шо там поддерживать? :-)
no subject
Date: 2014-07-11 04:44 pm (UTC)http://msdn.microsoft.com/en-us/library/windows/desktop/ff485897(v=vs.85).aspx
И про ComboBox_AddString говорится
"Minimum supported client: Windows 2000 Professional" - свежачок. :)
no subject
Date: 2014-07-11 05:10 pm (UTC)Неужто ты забыл, что оно прекрасно работало и на Win95, и на NT 3.51?
Просто Microsoft больше не поддерживает старые windows и старые SDK для них.
Некоторые редакции 2000 и XP ещё ограничено поддерживаются для некоторых клиентов MS, только это мешает им написать в MSDN для всего WinAPI "Minimum supported client: Windows 7".