0

同じ共有ライブラリに依存する 3 つのプロジェクトがあります。

プロジェクト全体でグローバルに共有されたオブジェクトを提供しているライブラリ内にシングルトン クラスがあります。とにかく、このグローバルに共有されたオブジェクトはクラスのインスタンスであり、プラットフォームによって異なります。

モバイル アプリケーションの場合:

public static var message : TMobileMessage;

デスクトップ アプリケーションの場合:

public static var message : TDesktopMessage;

Web アプリケーションで:

public static var message : TWebApplication;
  • 次のコードが機能しないため、宣言で条件コンパイルを実装する方法:

    If( CONFIG::applicationType == 'mobile' )
        public static var message : TMobileMessage;
    else
       If( CONFIG::applicationType == 'desktop' )
           public static var message : TDesktopMessage;
       else
           If( CONFIG::applicationType == 'web' )
               public static var message : TWebApplication;
    
4

2 に答える 2

2

私は次のことを提案します。

  1. 次のような条件付きコンパイラの宣言を使用します。

    CONFIG::MOBILE { public static var message : TMobileMessage; }

    CONFIG::DESKTOP { public static var message : TDesktopMessage; }

    CONFIG::WEB { public static var message : TWebApplication; }

  2. 設定ごとに flex-config.xml を作成します。各 config.xml で次の条件を宣言します。

flex-config-mobile.xml

<compiler>
        <define>
            <name>CONFIG::MOBILE</name>
            <value>true</value>
        </define>
        <define>
            <name>CONFIG::DESKTOP</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::WEB</name>
            <value>false</value>
        </define>
</compiler>

flex-config-desktop.xml

<compiler>

        <define>
            <name>CONFIG::MOBILE</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::DESKTOP</name>
            <value>true</value>
        </define>
        <define>
            <name>CONFIG::WEB</name>
            <value>false</value>
        </define>

</compiler>

フレックス構成 web.xml

<compiler>

        <define>
            <name>CONFIG::MOBILE</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::DESKTOP</name>
            <value>false</value>
        </define>
        <define>
            <name>CONFIG::WEB</name>
            <value>true</value>
        </define>

</compiler>
  1. ビルド スクリプトまたは IDE で適切な flex-config を使用します。
于 2012-12-09T15:21:02.573 に答える
1

CONFIGをコンパイラー引数として定義するか、flex_config.xmlを変更する場合は、以下を使用できます。

(TDesktopMessage、TMobileMessageなどはIMessageまたはあなたが望むものを拡張する必要があります。)

public static var message:IMessage;


CONFIG::mobile
{
  msg = "mobile"; //or msg = messages[mobile] or however you want to declare
}

CONFIG::desktop
{
  msg = "desktop";
}

CONFIG::web
{
  msg = "web";
}
于 2012-12-09T23:50:48.027 に答える