我可以生成自定义编译错误吗?如果可以,怎么做?

30

我想要做的是,我有一个项目必须在某个版本的Delphi或更高版本中编译。我想使用条件编译指令测试Delphi版本,然后生成自定义编译器错误和自定义消息。如果不可能产生错误,则产生自定义编译器警告或提示也可以。

当然,我可以在条件代码段中放一些无法编译的胡言乱语,这很好。但我的问题是“我能够有条件地生成自定义编译器错误吗?”


谢谢Johan和Serg。

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

3
谢谢大家的回答! - Cary Jensen
2个回答

46

你可以使用:

{$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
当然。而且你可以像Cary想要的那样把它们放在{$IFDEF}语句之间,以警告所需的编译器版本。 - Marjan Venema
虽然我对得到点赞很开心,但是这个答案有什么了不起的呢?难道大家突然都有了创建自定义编译器消息的冲动吗? - Johan
2
我认为这是因为它不经常出现,但可能非常有用。另外,在发布这个问题之前,我瞧了一眼,没有看到任何相关的内容。因此,这可能是一个鲜为人知的技巧。我自己肯定不知道,而且我已经写过和使用了每个版本的Delphi。 - Cary Jensen

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.

这是在哪个版本中引入的? - Johan
@Johan:我确定它是在 Delphi 2007 之前引入的。目前我没有旧版 Delphi 可以检查。 - kludg
你可以检查IFDEF VER140(Delphi6)和类似的定义,VER22 = Delphi XE。 - Kromster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接