2015-05-01 69 views
0

我有一個應用程序應該在MACOS和IOS上運行。 不知怎的,編譯爲IOS當兩個代碼被執行,它讓我瘋狂:編譯器指令不匹配

procedure TForm1.Button1Click(Sender: TObject); 
begin 

    {$IfDef MacOs} 
    ShowMessage('MACOS'); 
    {$Endif} 

    {$IfDef IOS} 
    ShowMessage('IOS'); 
    {$Endif} 

end; 

當任何iOS設備上運行,無論是信息的顯示。

換句話說,IOS應用執行用於MACOS

任何想法定義的任何代碼?

+0

膨脹! XE7的另一個增加併發症,就像我們沒有足夠的。 感謝您的回覆。 – DanielH

回答

1

這是設計,你可以在文檔中看到Conditional Compilation

如果你想iOS和OSX區分,使用MACOS(OSX)和CPUARM(IOS)預定義的常量來代替,這兩者在我上面鏈接的文檔的平臺部分中列出。

正如Remy Lebeau在他的評論中指出的那樣,這在iOS模擬器下運行時無效。爲了正確區分兩者,您需要使用{$IF defined(MACOS) and not defined(IOS)}

+1

'MACOS'也在iOS模擬器中定義,但'CPUARM'不是。因此,爲了區分OSX和iOS,您需要'{$ IF defined(MACOS)and not defined(IOS)}'。如果你需要在FPC中編譯代碼,它會變得更加複雜,因爲DCC和FPC對OSX使用不同的定義。 –