【问题标题】:Can I generate a custom compiler error? If so, how?我可以生成自定义编译器错误吗?如果是这样,怎么做?
【发布时间】:2011-09-03 23:35:39
【问题描述】:

这就是我想要做的。我有一个项目必须在某些版本的 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}

【问题讨论】:

  • 谢谢大家的回答!

标签: delphi


【解决方案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 及更高版本。

【讨论】:

  • 确实如此。当然,您可以将这些放在 {$IFDEF} 语句之间,就像 Cary 想要做的那样,以警告所需的编译器版本。
  • 并不是说我对赞成票不满意,但是这个答案有什么好处呢?是不是每个人都有创建自定义编译器消息的突然冲动?
  • 我认为这是因为它不是经常出现的东西,但它确实很有用。另外,在发布这个问题之前,我看了一会儿,并没有看到任何手头的东西。因此,这可能是一种鲜为人知的技术。我自己当然不知道,我写过并使用过所有版本的 Delphi。
  • 你应该得到支持,因为你实际上 a) 给出了所有五个例子,b) 给每个例子一个适当的例子,c) 明确说明它将发出什么。这是一个很好的答案,值得点赞。
【解决方案2】:

自从 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:我确定它是在 Delphi 2007 之前引入的。目前我没有旧的 Delphi 版本可供检查。
  • 您可以检查 IFDEF VER140 (Delphi6) 和类似的定义,VER22 = Delphi XE。
  • 我认为条件表达式是在 Linux 平台上的 Kylix 和 Windows 平台上的 Delphi 6 中引入的。是的:books.google.com/…
猜你喜欢
  • 2021-06-30
  • 2020-05-24
  • 2011-12-30
  • 2012-04-08
  • 2017-11-14
  • 2017-09-26
  • 2020-03-25
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多