вторник, 25 июня 2013 г.

Как избавить свой модуль от опасных зависимостей

Написал тут журнал рабочего времени. Он перехватывает сообщения, посылаемые каркасом в документы и собирает статистику, в которой, кроме подсчёта нажатий на клавиши и кликов мышкой, определяется ещё и итоговый размер текста.

А у текстов (TextViews) есть некоторая зависимость от главнейшего модуля ядра Windows. Поскольку для перехвата сообщений журнал прямым образом встраивается в Windows, то при старте ядра происходят всякие нехорошие вещи, связанные с циклическим импортом.

Решил проблему простым хуком, который устанавливается в журнал уже после того, как прогрузится всё ядро, с помощью скрипта System\Config. То есть, зависимости от TextViews перенесены из журнала в хук.

Есть и другой способ избавления от зависимостей, это - межмодульная шина сообщений. Способ достаточно изящный и эффективный, но в данном случае не хотелось иметь никаких дополнительных привязок, ведь базовая функциональность журнала должна опираться исключительно на ядро.


Постоянные читатели