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

Car*_*sen 27 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}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 43

您可以使用:

{$Message HINT|WARN|ERROR|FATAL 'text string' } 
Run Code Online (Sandbox Code Playgroud)


{$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 
Run Code Online (Sandbox Code Playgroud)

请参阅:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsmessagedirective_xml.html

这适用于Delphi 6及更高版本.

  • 我认为这是因为它不是经常出现的东西,但却非常有用。另外,在发布这个问题之前我查了一下,并没有看到任何现成的东西。因此,这可能是一项鲜为人知的技术。我自己当然不知道,而且我写过并使用过 Delphi 的每个版本。 (2认同)

klu*_*udg 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.
Run Code Online (Sandbox Code Playgroud)

  • 我认为在Linux平台上的Kylix和Windows平台上的Delphi 6中引入了conditionalexpressions.是的:http://books.google.com/books?id=V9t0lA-BPUAC&pg=PA52&lpg=PA52&dq=%22delphi+6%22+CONDITIONALEXPRESSIONS&source=bl&ots=4-UBsNal5r&sig=e-8cfyKVxOe5Z_wDZ1jtqKCyycw&hl=en&ei=s0ThTf3YLI-cOsLenNUG&sa = X&OI = book_result&CT =导致&resnum = 1&VED = 0CBcQ6AEwAA#v = onepage&q =%22delphi%206%22%20CONDITIONALEXPRESSIONS&F =假 (2认同)