2011-05-28 50 views
24

這是我想要做的。我有一個項目必須在某個版本的Delphi或更高版本中編譯。我想使用條件編譯器指令來測試Delphi版本,然後導致使用自定義消息生成自定義編譯器錯誤。如果錯誤是不可能的,那麼能夠生成定製的編譯器警告或提示也是足夠的。我可以生成自定義編譯器錯誤嗎?如果是這樣,怎麼樣?

當然,我可以把一些不可編譯的giberish放在條件代碼段中,這很好。但我的問題是「我能否有條件地生成一個自定義的編譯器錯誤?」


謝謝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

謝謝大家,尋找答案! – 2011-05-28 17:28:22

回答

40

您可以使用:

{$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}'語句之間加入這些語句來警告所需的編譯器版本。 – 2011-05-28 17:32:58

+0

不是說我對upvotes不滿意,但是這個答案有什麼了不起?每個人都會突然想要創建自定義的編譯器消息嗎? – Johan 2011-05-29 21:55:48

+1

我認爲這是因爲它不是經常出現的東西,但可以非常有用。另外,在發佈這個問題之前,我探討了一下,沒有看到任何東西。因此,這可能是一種鮮爲人知的技術。我自己當然不知道,而且我已經寫了關於並使用每個版本的Delphi的內容。 – 2011-05-29 22:46:16

6

檢查德爾福版本,因爲CONDITIONALEXPRESSIONS指令在Delphi 6中引入變得輕鬆:

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. 
+0

其中引入了哪個版本? – Johan 2011-05-28 16:08:21

+0

@Johan:我確定它是在Delphi 2007之前推出的。目前我沒有舊的Delphi版本要檢查。 – kludg 2011-05-28 16:21:35

+0

你可以檢查IFDEF VER140(Delphi6)和類似的defs,VER22 = Delphi XE。 – Kromster 2011-05-28 16:41:50

相關問題