Могу ли я создать пользовательскую ошибку компилятора? Если да, то как?
Вот что я хочу сделать. У меня есть проект, который должен быть скомпилирован в некоторой версии Delphi или позже. Я хотел бы использовать условную директиву компилятора для проверки версии Delphi, а затем вызвать создание пользовательской ошибки компилятора с помощью настраиваемого сообщения. Возможность генерировать настраиваемое предупреждение или подсказку компилятора также может быть adaquate, если ошибка невозможна.
Конечно, я мог бы поместить некоторый un-compilable giberish в сегмент условного кода, и это прекрасно. Но мой вопрос: "Могу ли я генерировать условно ошибку пользовательского компилятора?"
Спасибо Йохан и Серг.
Вот решение и более подробная информация о проблеме. У меня есть приложение, которое было первоначально создано в Delphi 2007. Оно включает компоненты Internet Direct для присоединения к веб-службе. Они используют SSL. Недавно я обновил свои библиотеки SSL до более поздней версии, и они не так хорошо работают с компонентами Delphi 2007 Indy. Теперь я добавил следующие директивы компилятора, чтобы убедиться, что это приложение больше не будет скомпилировано с Delphi 2007 или ранее:
{$IF CompilerVersion <= 19.0} // Delphi 2007 = 19.0
{$MESSAGE Error 'This project must be compiled in Delphi 2009 or later'}
{$IFEND}
Ответы
Ответ 1
Вы можете использовать:
{$Message HINT|WARN|ERROR|FATAL 'text string' }
{$MESSAGE 'Boo!'} emits a hint
{$Message Hint 'Feed the cats'} emits a hint
{$messaGe Warn 'Looks like rain.'} emits a warning
{$Message Error 'Not implemented'} emits an error, continues compiling
{$Message Fatal 'Bang. Yer dead.'} emits an error, terminates compiler
Смотрите: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsmessagedirective_xml.html
Это работает в Delphi 6 и более поздних версиях.
Ответ 2
Проверка версии Delphi стала легкой, поскольку в Delphi 6 была введена директива CONDITIONALEXPRESSIONS:
program requires2010;
{$APPTYPE CONSOLE}
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF CompilerVersion >= 21.0} // 21.0 is Delphi 2010
{$DEFINE DELPHI2010}
{$IFEND}
{$ENDIF}
begin
{$IFNDEF DELPHI2010}
{$MESSAGE Fatal 'Wrong Delphi Version'}
{$ENDIF}
Writeln('Continued');
Readln;
end.