Интересно, а кто‐нибудь вводит эти команды вручную? В то время как любая IDE в 2026 году позволяет манипулировать системой контроля версий щелчками мыши и в удобном виде.
COM тут ни при чём. Циклов обработки сообщений в программе может быть несколько. Второй можно сделать в явном виде или неявно через модальные диалоги (MessageBox, DialogBoxParam). Это работает без всякого COM. В документации по оконным процедурам WndProc сказано, что процедура должна быть реентерабельной (reentrant — повторно входимой). Это требование связано с особенностями обработки сообщений в Windows, где одна и та же процедура может вызываться несколько раз для обработки разных сообщений, поступающих в систему.
А вы не сильно верьте в то, что написала корпорация Микрософт внизу функций.
Например, берём такую функцию как CreateWindowExA — там нет упоминания Win95, хотя всем очевидно что в Win95 такая функция есть. Похоже, что могущественная корпорация вычищает упоминание о старых системах.
Не стоит доверять словам «Minimum supported client» на современном сайте, нужно или самостоятельно проверять наличие функции в библиотеке, или достать старые SDK.
Если сервер будет падать на любую ошибку выделения памяти, значит через функцию malloc можно уничтожить такой сервер, подставив в параметр заведомо большое значение.
Это же рай для злоумышленника. Из UserMode можно уничтожить систему.
А если функция возвращает объект, который должен быть сохранён в дереве или графе, и используется в нескольких местах. Кто должен удалить объект? «Тот кто создал — тот и удаляет», то есть та самая функция CreateObject? Я даже не представляю какова должна быть сигнатура функции CreateObject, которая одновременно и возвращает объект, и применяется для удаления, вводя в заблуждение одним своим названием.
RSS это просто XML‐файл на диске, он не может масштабироваться по определению.
сервис должен выдерживать нагрузку около 1000 запросов в секунду! популярный сервис с 1 млн. подписчиков
Ваш вебсервер не может держать 1000 соединений — смените вебсервер.
Если на вас вебсервер зайдёт весь этот миллион подписчиков чтобы посмотреть страницу index.html, вы тоже обвините язык разметки гипертекста, что он не масштабируется?
Насколько я помню множественное наследование в С++ было разрешено
Двойное наследование — это когда от одного и того же интерфейса дважды наследуешься. В C++ это невозможно. Поэтому приходится переименовывать IUnknown, чтобы иметь две VTable с одинаковыми методами.
можно считать что вы согласились хотя бы с тем, что делегирование возможно?
В описанном вами варианте — нет. Вы пишете, что в QueryInterface можно возвращать какой хочу интерфейс, это не так. Вы можете возвращать только те интерфейсы, от которых унаследованы, а если хотите возвращать чужие интерфейсы, то вам необходимо создать агрегат, о чём в вашей статье не сказано.
В read-only полях курсор и должен мигать, и должно быть выделение текста, иначе как оттуда выделенное скопировать в буфер
Интересно, а кто‐нибудь вводит эти команды вручную? В то время как любая IDE в 2026 году позволяет манипулировать системой контроля версий щелчками мыши и в удобном виде.
Но ведь всегда можно было в прототипе функции указать тип вызова. Иначе нельзя было бы вызывать WinAPI из си или паскаля.
Есть какой‐нибудь минималистичный пример, который демонстрирует проблему?
COM тут ни при чём. Циклов обработки сообщений в программе может быть несколько. Второй можно сделать в явном виде или неявно через модальные диалоги (MessageBox, DialogBoxParam). Это работает без всякого COM. В документации по оконным процедурам WndProc сказано, что процедура должна быть реентерабельной (reentrant — повторно входимой). Это требование связано с особенностями обработки сообщений в Windows, где одна и та же процедура может вызываться несколько раз для обработки разных сообщений, поступающих в систему.
Accessibility на нуле: NVDA не озвучивает текст под курсором.
Похоже что Accessibility нормально работает только в WinAPI.
Виртуальную карту можно создать за одно нажатие, и уничтожить за одно нажатие. Страх засветки такой карты необоснован.
А вы не сильно верьте в то, что написала корпорация Микрософт внизу функций.
Например, берём такую функцию как
CreateWindowExA— там нет упоминания Win95, хотя всем очевидно что в Win95 такая функция есть. Похоже, что могущественная корпорация вычищает упоминание о старых системах.Не стоит доверять словам «Minimum supported client» на современном сайте, нужно или самостоятельно проверять наличие функции в библиотеке, или достать старые SDK.
Я очень надеюсь, что вы с пользой потратили эти сэкономленные 100 миллисекунд?
Выделение памяти разного размера бывает. Например, под буфер 500 мегабайт памяти может не быть, а под объект в 10 килобайт будет.
Или сейчас памяти недостаточно, а потом один из клиентов отключился, память освободилась — и теперь памяти стало хватать.
Неправильно думать что однажды получив ошибку выделения памяти мы будем получать её всегда. Не хватает памяти — это преходящее явление.
Если сервер будет падать на любую ошибку выделения памяти, значит через функцию malloc можно уничтожить такой сервер, подставив в параметр заведомо большое значение.
Это же рай для злоумышленника. Из UserMode можно уничтожить систему.
Не может для новых клиентов, а для старых память уже выделена, и клиенты работают.
Сервер как минимум продолжает обслуживать текущих клиентов. Это полезно.
Нет, упасть — это очень плохая идея. Сервер не должен падать под нагрузкой.
Это приведёт к созданию другого объекта, а не оригинального. И если кто‐то, держащий ссылку на оригинал, изменит его, это не отразится на копии.
А если функция возвращает объект, который должен быть сохранён в дереве или графе, и используется в нескольких местах. Кто должен удалить объект? «Тот кто создал — тот и удаляет», то есть та самая функция CreateObject? Я даже не представляю какова должна быть сигнатура функции CreateObject, которая одновременно и возвращает объект, и применяется для удаления, вводя в заблуждение одним своим названием.
Конечно пропитаются. Макароны мягкие становятся от того, что в них вода попадает.
RSS это просто XML‐файл на диске, он не может масштабироваться по определению.
Ваш вебсервер не может держать 1000 соединений — смените вебсервер.
Если на вас вебсервер зайдёт весь этот миллион подписчиков чтобы посмотреть страницу index.html, вы тоже обвините язык разметки гипертекста, что он не масштабируется?
Вы меня простите, но зачем в каждый заголовок добавлять визуальный мусор из символа «▍»?
Двойное наследование — это когда от одного и того же интерфейса дважды наследуешься. В C++ это невозможно. Поэтому приходится переименовывать
IUnknown, чтобы иметь две VTable с одинаковыми методами.В описанном вами варианте — нет. Вы пишете, что в
QueryInterfaceможно возвращать какой хочу интерфейс, это не так. Вы можете возвращать только те интерфейсы, от которых унаследованы, а если хотите возвращать чужие интерфейсы, то вам необходимо создать агрегат, о чём в вашей статье не сказано.