21 декабря 2013 г.

GitHub

Исходный код примера подключаемого модуля из статьи Пишем подключаемый модуль для ЛОЦМАН Клиент и исходный код IRemoteConnection теперь доступны на GitHub — github.com/achechulin/loodsman.

Текущую версию кода можно скачать без клиента Git или SVN, нажав кнопку «Download ZIP» в правой части страницы репозитория.

15 мая 2013 г.

Использование HTMLHelpViewer в DLL

В модуле HTMLHelpViewer со времени его появления в Delphi 2005 и до выхода Update 4 для Delphi XE2 была ошибка, не позволяющая использовать этот модуль в DLL. Ошибка состоит в том, что в секции finalization всегда выполняется вызов HtmlHelp(HH_CLOSE_ALL), что может приводить к загрузке библиотеки HHCTRL.OCX. Для обычного приложения это не страшно, просто теряется немного времени на загрузку-выгрузку библиотеки. Но если мы пишем DLL (например, COM-объект или плагин для другого приложения), то выполнение секции finalization будет происходить внутри DllMain, и попытка загрузить HHCTRL.OCX приведет либо к зависанию приложения, либо к ошибке Access Violation (в зависимости от версии Windows).

26 апреля 2013 г.

WM_PAINT во время ожидания вызова COM-сервера

В новых версиях Windows, начиная с Vista, приложение получает сообщение WM_PAINT во время ожидания вызова COM-сервера. Как написано в статье «Do you receive WM_PAINT when waiting for a COM call to return?», основной причиной для этого стала необходимость в правильной работе UAC (контроль учётных записей пользователей). Если приложение не рассчитано на такое поведение, то это может привести к ошибкам.

1 марта 2013 г.

Запись в качестве ключа TDictionary

В данной статье мы рассмотрим один тонкий момент при использования записи в качестве ключа для TDictionary.

Следуя общепринятым практикам разработки ПО, попробуем реализовать шаблон проектирования Коллекция объектов (Identity Map), с помощью TDictionary. В качестве ключа будем использовать идентификатор сущности, а в качестве значения объект сущности. Идентификаторы сущностей могут быть как простые, так и составные. Для составных будем использовать запись — идентификатор должен быть объектом-значением (Value Object). В примере мы создадим коллекцию объектов «Пользователь» для ЛОЦМАН:PLM.

23 февраля 2013 г.

Всплывающие подсказки и QC85705

В VCL есть незакрытый баг QC85705. Он был открыт в июне 2010 года для Delphi 2010, но присутствует и в старых, и в новых версиях.

В ходе разработки одного из плагинов для ЛОЦМАН:PLM я столкнулся с ошибкой «Access violation at address...» при выгрузке плагина. Ошибка возникала не каждый раз, а только иногда, и приводила к краху всего приложения.