0

Flex 4 SDK でコンパイルしている純粋な Action Script 3 プロジェクトがあります。必要に応じて、compc、mxmlc、および asdoc を自動的に呼び出す標準の Makefile があります。私の Mac OS X 10.4 以降のコンピュータでは、プロジェクトはエラーや警告なしで正常にコンパイルされています。ただし、Windows XP (Cygwin がインストールされている) で開発している同僚と共有すると、「互換性のない署名」エラーの非常に大きなリストが表示されます。なぜ彼はそれらのエラーを受け取っているのですか? 署名に互換性がないようです。

注: 問題の署名は「オリジナル」と「エクスポート」であり、次のように使用されます。

パブリック インターフェイス AbstractX
{
    関数 original() : オブジェクト;
    関数 export() : オブジェクト
}
public クラス ImportX は AbstractX を実装します
{
    public ImportX(obj : オブジェクト) {
        _loadedobj = obj;
        _exportobj = obj.export();
    }

    public static function wrap(obj : Object) : AbstractX {
        var 結果: AbstractX = null;
        if ( obj != null ){
            if ( obj は AbstractX ){
                結果 = obj as AbstractX;
            }else if ( obj.original() is AbstractX ){
                結果 = obj.original() as AbstractX;
            }そうしないと{
                結果 = 新しい ImportX(obj);
            }
        }
        結果を返します。
    }

    public function original() : オブジェクト {
        _loadedobj を返します。
    }

    public function export() : オブジェクト {
        _exportobj を返します。
    }

    プライベート var _loadedobj : オブジェクト = null;
    プライベート var _exportobj : オブジェクト = null;
}
public class X は AbstractX を実装します
{
   public function X() : void {
      //...
   }

   public function original() : オブジェクト {
       これを返します。
   }

   public function export() : オブジェクト {
       if ( ! _export ){
           _export = 新しい ExportX(これ);
       }
       _エクスポートを返します。
   }

   プライベート var _export : オブジェクト = null;
}

注: 上記のコードは、2 つの SWF ファイルで使用されている Action Script 3 クラスを、一方の SWF が他方を動的にロードするときに同じクラスに解決するにはどうすればよいですか?に対する私の解決策の一部です。

4

2 に答える 2

1

Mac OS X でもコンパイルできますか? 最近ビルド スクリプトを変更したが、「インクリメンタル」コンパイラ オプションを使用している場合は、キャッシュされたビルドが原因で、Mac でビルドが成功している可能性があります。*.cache ファイルをすべて削除し、Mac で再構築して、同じエラーが発生するかどうかを確認してください。

奇妙な「互換性のない署名」エラーが発生する 1 つの方法は、出力ディレクトリをライブラリ パスに配置した場合です。たとえば、*.swc ファイルを $(MAINFOLDER)/lib に出力していて、ライブラリ パスに $(MAINFOLDER)/lib もリストされているとします。この理由は、最初はコード内のインターフェイスが使用されますが、ビルドの途中で (互換性のない) コンパイルされたインターフェイスが使用されるためだと思います。

于 2009-07-19T02:42:19.877 に答える
0

私は何の問題も見ません... sigsは完全に互換性があります... WinXPのガンボを使用して、私のマシンで正常にコンパイルされます...パブリック関数ImportXである必要があることを除いて...そしてExportX不明です...何が起こるか、彼はそれを手動でコンパイルしようとしていますか? エラーが cygwin や makefile に起因するとは考えていませんが、これはクロス プラットフォームであるため、ANT を使用したい場合があります。 ..

問題は他の場所にあると思います...または、彼のコンパイル出力をここに投稿してください...

編集:わかりました、それなら、コンパイルできない方法がわからないので、彼のコンパイラ出力を間違いなく投稿する必要があります...

ただし、1つのメモ:あなたが何をしようとしているのかについて、今あなたのメモを読みました...実際には機能しないと思います... 2つのswfs間でインターフェースを共有したいので、同じ問題が発生します...インターフェイスを実装することは、実際には単にメソッドを実装することを意味するのではなく、特性オブジェクトがそのインターフェイスを実装していることを知っていることを意味します...したがって、同じエラーが発生します...

挨拶

back2dos

于 2009-07-17T02:47:08.533 に答える