Delphi 我可以生成自定义编译器错误吗?如果是,怎么做?
这是我想做的。我有一个项目,必须在一些版本的Delphi或更高版本编译。我想使用一个条件编译器指令来测试Delphi版本,然后用一条自定义消息生成一个自定义编译器错误。如果不可能出现错误,那么能够生成自定义编译器警告或提示也很难 当然,我可以在条件代码段中放入一些不可编译的giberish,这很好。但我的问题是“我能有条件地生成自定义编译器错误吗?”Delphi 我可以生成自定义编译器错误吗?如果是,怎么做?,delphi,Delphi,这是我想做的。我有一个项目,必须在一些版本的Delphi或更高版本编译。我想使用一个条件编译器指令来测试Delphi版本,然后用一条自定义消息生成一个自定义编译器错误。如果不可能出现错误,那么能够生成自定义编译器警告或提示也很难 当然,我可以在条件代码段中放入一些不可编译的giberish,这很好。但我的问题是“我能有条件地生成自定义编译器错误吗?” 谢谢约翰和塞格 以下是解决方案,以及有关此问题的更多详细信息。我有一个最初在Delphi2007中构建的应用程序。它包括连接到Web服务的Int
谢谢约翰和塞格 以下是解决方案,以及有关此问题的更多详细信息。我有一个最初在Delphi2007中构建的应用程序。它包括连接到Web服务的Internet Direct组件。它们使用SSL。我最近将我的SSL库升级到了一个更高的版本,而这些库在Delphi2007 Indy组件中表现得不太好。我现在添加了以下编译器指令,以确保不再使用Delphi 2007或更早版本编译此应用程序:
{$IF CompilerVersion <= 19.0} // Delphi 2007 = 19.0
{$MESSAGE Error 'This project must be compiled in Delphi 2009 or later'}
{$IFEND}
{$IF compilervision您可以使用:
{$Message HINT|WARN|ERROR|FATAL 'text string' }
见:
这适用于Delphi 6及更高版本。自从在Delphi 6中引入ConditionalPressions指令以来,检查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)进行检查和defs一样,VER22=Delphi XE。我认为conditionalexpressions是在Linux平台上的Kylix和Windows平台上的Delphi 6中引入的。是的:谢谢大家的回答!确实如此。当然,您可以将它们放在{$IFDEF}之间
像Cary这样的语句想对所需的编译器版本发出警告。这并不是说我不满意上面的投票,而是这个答案有什么了不起的?每个人都会突然产生创建自定义编译器消息的冲动吗?我想这是因为它不是经常出现的东西,但可能真的很有用。另外,我还提到了一点b在发布这个问题之前,我没有立即看到任何东西。因此,这可能是一个鲜为人知的技术。我自己肯定不知道,我写过并使用过Delphi的每个版本。你值得投票,因为你实际上a)给出了所有五个例子,b)给了每个人一个适当的例子,c)明确地说出了我的想法这是一个值得投票的好答案。
{$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
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.