13 февраля 2015 г.

Пробуем перейти на XE5

В 2012 году я уже пытался перевести свои основные проекты с Delphi XE на XE2. Тогда дело встало из-за ошибки компилятора в XE2.
На этот раз я решил повторить эксперимент и попытался перейти с Delphi XE на версию XE5 (Update 2).

Кратко: сразу не заработало, проблемы удалось решить, но осадок остался.
Для интересующихся подробности ниже.

7 ноября 2014 г.

mORMot

Сегодня я хочу рассказать о mORMot. Надеюсь, эта статья заинтересует вас и подтолкнет попробовать библиотеку.

mORMot — это набор библиотек для разработки программного обеспечения на основе сервис-ориентированной архитектуры (распределенных, слабо связанных заменяемых компонентов, со стандартизированными интерфейсами и протоколами, в данном случае на основе REST). Все библиотеки доступны в виде исходного кода и распространяются по лицензии MPL, GPL или LGPL (на выбор).

Набор библиотек содержит большое количество полезных компонентов: сетевого взаимодействия, доступа к БД, шифрования, сжатия данных, создания PDF, выполнения JavaScript, ORM и многое другое. Все компоненты минимально связаны друг с другом — можно использовать только те, которые нужны. Например, для создания PDF нужно добавить в свой проект всего три файла: SynPDF.pas, SynCommons.pas и SynLZ.pas.

12 апреля 2014 г.

Подключаемые модули в новых версиях ЛОЦМАН Клиент

Для разработчиков плагинов в новых версиях 13 и 14 комплекса произошли заметные изменения (под версиями 13 и 14 здесь подразумевается «Комплекс решений АСКОН 2013» и «Комплекс решений АСКОН 2014»).

Положительная сторона изменений в том, что API плагинов теперь документирован (см. LoodsmanClientApi.chm) и предоставляет разработчику больше возможностей. Из недостатков стоит отметить несовместимость API со старыми версиями плагинов, и даже между 13 и 14 версиями. И документации мало, и местами она не соответствует реальному положению дел. И баги в IDataSet... Но не будем о грустном.

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.