воскресенье, апреля 22, 2007

Маленький хинт :)

Часто в работе приходится использовать сторонние библиотеки (хотя это можно отнести и к своим) имеющие директивы условной компиляции и соответствующие определения. Это здорово, это позволяет гибко, под нужды приложения, компилировать библиотеку (например я, в UIB включаю UIB_NO_COMPONENT, чтоб предком всех классов стал TObject). Это хорошая практика, но она имеет недостатки: когда происходит обновление версии библиотеки, старые определения (в файлах .inc) могут быть утеряны, не всегда-же все держится в голове. А если таких библиотек несколько? В общем, я для себя нашел способ избавиться от этой головной боли :) В отдельный модуль, или файл проекта (а вообще, куда угодно) подключаются файлы определений (*.inc) библиотек и создаются директивы условной компиляции (пример для UIB):

{$IFDEF DLLREGISTRY}

{$MESSAGE FATAL 'Отключить $DEFINE DLLREGISTRY (jvuib.inc)'}

{$ENDIF}

{$IFNDEF FB20}

{$MESSAGE FATAL 'Включить $DEFINE FB20 (jvuib.inc)'}

{$ENDIF}

{$IFDEF UIBTHREADSAFE}

{$MESSAGE FATAL 'Отключить $DEFINE UIBTHREADSAFE (jvuib.inc)'}

{$ENDIF}

{$IFNDEF UIB_NO_COMPONENT}

{$MESSAGE FATAL 'Включить $DEFINE UIB_NO_COMPONENT (jvuib.inc)'}

{$ENDIF}

Теперь уж точно ничего не забудется при обновлении :)