我可以生成自定义编译器错误吗?如果是这样,怎么样?

时间:2011-05-28 15:09:14

标签: delphi

这是我想要做的。我有一个项目必须在某些版本的Delphi或更高版本中编译。我想使用条件编译器指令来测试Delphi版本,然后使用自定义消息生成自定义编译器错误。如果无法发生错误,能够生成自定义编译器警告或提示也是适当的。

当然,我可以在条件代码段中放入一些不可编辑的giberish,这很好。但我的问题是“我可以有条件地生成自定义编译器错误吗?”


谢谢Johan和Serg。

以下是解决方案,以及有关该问题的更多详细信息。我有一个最初在Delphi 2007中构建的应用程序。它包括连接到Web服务的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}

2 个答案:

答案 0 :(得分:43)

您可以使用:

{$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及更高版本。

答案 1 :(得分:6)

由于在Delphi 6中引入了CONDITIONALEXPRESSIONS指令,因此检查Delphi版本变得很容易:

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.