WebDelphi.ru: итоги уходящего 2020 года
Наконец-то 2020 год подходит к концу! Скачать “Это был тяжелый год” – значит ничего не сказать. Лично для меня этот год был, наверное, самым изматывающим
Пройди опрос — выиграй лицензию EurekaLog
Правила просты: вы помогаете нам улучшить EurekaLog, принимая участие в опросе. Заполнение анкеты займёт всего несколько минут. По окончании опроса будут выбраны 3 случайных участника.
- Победители получат одну лицензию Single Developer Enterprise, если у них ещё нет лицензии.
- Либо победитель получит бесплатное продление срока обслуживания существующей лицензии (на 2 года).
Опрос завершится 31 января 2021 года. Победители будут объявлены 1 февраля 2021 года. Вы можете пройти опрос только один раз. Дубликаты будут удалены. С победителями свяжутся по электронной почте.
Работа с ресурсами приложения
Ресурсы приложения Windows – это данные, которые встроены внутрь EXE, DLL, CPL и MUI файлов. Общеизвестным примером такого ресурса является иконка приложения. Windows API предопределяет
Даже в пустых приложениях есть баги
С нами связался человек, который утверждал, что нашёл баг в EurekaLog. Он обосновал это утверждение следующим образом: если создать новое приложение DataSnap и добавить в него EurekaLog, то приложение вылетит с Access Violation при выходе.
При расследовании выяснилось следующее:
- В модуле данных
ServerContainerUnit1
находится компонент сервераDSServer1
; - Тот же модуль данных содержит два вспомогательных компонента:
DSTCPServerTransport1
иDSServerClass1
; - Оба компонента
DSTCPServerTransport1
иDSServerClass1
указываютDSServer1
как «Server»; - При выходе приложения модуль данных
ServerContainerUnit1
будет уничтожен; - Уничтожение модуля данных означает уничтожение всех компонентов в нём — включая
DSTCPServerTransport1
иDSServerClass1
.Вот где это происходит:
- TDSServerClass.Destroy
- TComponent.DestroyComponents
- TDataModule.Destroy
- TDSTCPServerTransport.Destroy
- TComponent.DestroyComponents
- TDataModule.Destroy
При этом ни
TDSServerClass.Destroy
, ниTDSTCPServerTransport.Destroy
не уведомляют сервер о том, что они уничтожаются. В результатеDSServer1
продолжает хранить ссылку на (уже удалённые)DSTCPServerTransport1
иDSServerClass1
. - Итак, после удаления
DSTCPServerTransport1
иDSServerClass1
очистка модуля данныхServerContainerUnit1
продолжается; - Настаёт очередь удаления
DSServer1
. В частности, при этомDSServer1
пытается остановить все зарегистрированные в нём транспорты:- TDSCustomServer.StopTransports
- TDSCustomServer.Stop
- TDSServer.Stop
- TDSServer.Destroy
- TObject.Free
- TComponent.DestroyComponents
- TDataModule.Destroy
что и вызовет Access Violation, поскольку объекты для этих транспортов уже удалены.
Как видим, это — баг в DataSnap, а не в EurekaLog. EurekaLog лишь помогла найти этот баг. Действительно, когда EurekaLog не подключена, то DSServer1
может «успешно» вызвать StopTransports
, поскольку память уже удалённых объектов не будет изменена, и вызов методов уже удалённых объектов внутри StopTransports
пройдёт «успешно».
Заметьте, что эта ошибка сидит в DataSnap уже целую вечность и её никто не исправляет — ровно потому, что в голом приложении нет средств для её обнаружения. Похожие проблемы есть и в пустом приложении Fire Monkey (FMX), а также во многих стандартных компонентах Delphi.
Конкретно эту ошибку можно обойти, если заставить DSServer1
удаляться первым:
procedure TServerContainer1.DataModuleDestroy(Sender: TObject);
begin
FreeAndNil(DSServer1);
end;
Другие ошибки аналогичного плана нужно исследовать отдельно.
Если же вы не можете исправить ошибку — вы всегда можете выключить проверки памяти в EurekaLog, хотя это и не рекомендуется.
December Apple Platforms Patch for RAD Studio 10.4.1 версия от 18.12.2020
Компания Embarcadero выложила обновленную версию December Apple Platforms Patch for RAD Studio 10.4.1, о котором я писал вчера. В прошлый раз авторы патча забыли заменить
Windows 10. Обновление драйвера до версии 1968 года
Сегодня случайно заглянул в раздел «Необязательные обновления». Windows 10 Pro версии 20H2 (сборка 19042.685) предложила обновить драйвер INTEL до версии от 18 июля 1968.
Обновленная версия Apple Platforms Patch for RAD Studio 10.4.1
Компания Embarcadero выложила обновленную версию вышедшего в конце ноября Apple Platforms Patch for RAD Studio 10.4.1. Эта декабрьская версия патча является кумулятивной, т.е. включает в
Delphi 10.4.2. Новые возможности IDE и новый VCL контрол TControlList
Компания Embarcadero анонсировала добавление в Delphi 10.4.2 новых Native Windows VCL контролов. Один из них TControlList — оптимизированный виртуальный listview, который позволит отображать большое количество
Clever Internet Suite. Передача файлов по SFTP
SFTP (SSH File Transfer Protocol) — протокол прикладного уровня, предназначенный для выполнения различных операций с файлами через безопасное соединение. В отличие от FTP, он шифрует
Delphi, C++Builder и RAD Studio 10.4.2 Beta
Компания Embarcadero объявила о подготовке публичного тестирования бета-версии Delphi, C++Builder и RAD Studio 10.4.2, которая носит кодовое название «Hunter».