【问题标题】:Multi-Device Application with platform specific inclusions in the uses clause for Delphi XE8Delphi XE8 的使用条款中包含特定于平台的多设备应用程序
【发布时间】:2015-07-02 18:15:28
【问题描述】:

我有一个用 Delphi XE8 编写的移动应用程序,我可以从两个单独的项目部署到 Android 或 iOS。维护单独项目的唯一原因是不同的目标平台有不同的“用途”部分,这些部分不会编译......

以ANDROID为目的地:

uses 
  ...
  FMX.Layouts, FMX.ListView,
  FMX.PhoneDialer,
  IdURI,
  Androidapi.JNIBridge,
  Androidapi.JNI.Provider,
  AndroidApi.Jni.GraphicsContentViewText,
  Androidapi.JNI.Net,
  Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony,
  AndroidAPI.Helpers,
  AndroidApi.Jni.App,
  Androidapi.IOUtils, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Data.DBXDataSnap, IPPeerClient, ... ;

以IOS为目的地:

uses 
...
  FMX.Layouts, FMX.ListView,
  FMX.PhoneDialer,
  ///// iOS Only ///////////
  MacApi.Helpers, iOSapi.UIKit,
  ///// iOS Only ///////////
  IdURI, IdSSLOpenSSLHeaders_Static,
  System.IOUtils,
  IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Data.DBXDataSnap, IPPeerClient, ... ;

我尝试放置 {ifdef IOS} uses ... {Else} uses .... {EndIf IOS} 为两个不同的目标平台定义两个单独的 uses 语句,但这不会编译。

任何有用的建议将不胜感激。 -- 图片库

【问题讨论】:

  • 为我工作。当您尝试编译时,如果由于某种原因您正在使用 {$IFDEF IOS} 正确并且可能有一些东西没有被封装,那么它应该在您的使用条款中指出您的问题单元。
  • 您错过了$ 字符,不是吗?它应该是例如{$ifdef...},不是{ifdef...},否则你只写了cmets。
  • TLama 总是以 cmets 的形式发布答案...
  • 应该对“迄今为止提出的最愚蠢的问题”给予某种奖励。谢谢 TLama,希望这不会伤到你的大脑。
  • 哦,相信我,我在这里看到了一些非常非常愚蠢的问题。你远远高于他们。

标签: android ios delphi delphi-xe8


【解决方案1】:

正如 TLama 指出的那样,您似乎缺少 $ 字符。没有它,这些仅被视为 cmets。你应该做的是……

{$IFDEF IOS}
...
{$ELSE}
...
{$ENDIF}

或者:

{$IFDEF IOS}
...
{$ENDIF}
{$IFDEF ANDROID}
...
{$ENDIF}

例如:

uses 
...
  FMX.Layouts, FMX.ListView,
  FMX.PhoneDialer,
  {$IFDEF IOS}
  ///// iOS Only ///////////
  MacApi.Helpers, iOSapi.UIKit,
    {$IFDEF CPUARM}
  // iOS Devices Only
  IdSSLOpenSSLHeaders_Static,
  // iOS Devices Only
    {$ENDIF}
  ///// iOS Only ///////////
  {$ENDIF}
  {$IFDEF ANDROID}
  ///// Android Only ///////////
  Androidapi.JNIBridge,
  Androidapi.JNI.Provider,
  AndroidApi.Jni.GraphicsContentViewText,
  Androidapi.JNI.Net,
  Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony,
  AndroidAPI.Helpers,
  AndroidApi.Jni.App,
  Androidapi.IOUtils,
  ///// Android Only ///////////
  {$ENDIF}
  IdURI,
  System.IOUtils,
  IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Data.DBXDataSnap, IPPeerClient, ... ;

【讨论】:

  • @Remy 感谢您的编辑,我希望它对 OP 来说是不言自明的。但我看到你还添加了一些新的非常需要的条件,OP 可能没有意识到。
【解决方案2】:

其他方式

{$IF Defined(MSWINDOWS) or Defined(MACOS)} 
// some code
{$ENDIF}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2010-11-09
    • 1970-01-01
    • 2011-09-10
    • 2019-11-26
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多