2009-07-16 5 views
0

Ich habe ein reines Action Script 3-Projekt, das ich mit dem Flex 4 SDK kompiliere. Ich habe ein Standard-Makefile, das automatisch compc, mxmlc und asdoc aufruft. Das Projekt kompiliert sauber und ohne Fehler oder Warnungen auf meinem Mac OS X 10.4 + Computer; Wenn er jedoch mit einem Mitarbeiter geteilt wird, der auf Windows XP entwickelt wurde (mit Cygwin installiert), erhält er eine sehr große Liste von "inkompatiblen Signatur" -Fehlern. Warum bekommt er diese Fehler? Die Signaturen scheinen nicht inkompatibel zu sein.Viele "inkompatible Signatur" -Fehler unter Windows, aber nicht unter Mac OS X mit Flex 4 Gumbo

HINWEIS: Die Signaturen in Frage sind "Original" und "Export", so benutzten:

 
public interface AbstractX 
{ 
    function original() : Object; 
    function export() : Object 
} 
 
public class ImportX implements AbstractX 
{ 
    public ImportX(obj : Object) { 
     _loadedobj = obj; 
     _exportobj = obj.export(); 
    } 

    public static function wrap(obj : Object) : AbstractX { 
     var result : AbstractX = null; 
     if (obj != null){ 
      if (obj is AbstractX){ 
       result = obj as AbstractX; 
      }else if (obj.original() is AbstractX){ 
       result = obj.original() as AbstractX; 
      }else{ 
       result = new ImportX(obj); 
      } 
     } 
     return result; 
    } 

    public function original() : Object { 
     return _loadedobj; 
    } 

    public function export() : Object { 
     return _exportobj; 
    } 

    private var _loadedobj : Object = null; 
    private var _exportobj : Object = null; 
} 
 
public class X implements AbstractX 
{ 
    public function X() : void { 
     //... 
    } 

    public function original() : Object { 
     return this; 
    } 

    public function export() : Object { 
     if (! _export){ 
      _export = new ExportX(this); 
     } 
     return _export; 
    } 

    private var _export : Object = null; 
} 

HINWEIS: Der obige Code ist ein Teil meiner Lösung zu How do I make an Action Script 3 class, used in two SWF files, resolve to the same class when one SWF dynamically loads the other?

+0

Beitrag aktualisiert ... greetz – back2dos

Antwort

1

Sind Sie sicher, dass es kompiliert auch auf Mac OS X? Wenn Sie Ihre Build-Skripte vor kurzem geändert haben, aber die Compileroption "incremental" verwenden, wird sie möglicherweise aufgrund des zwischengespeicherten Builds auf Ihrem Mac erfolgreich erstellt. Versuchen Sie, alle * .cache-Dateien zu entfernen und auf Ihrem Mac neu zu erstellen, um zu sehen, ob Sie die gleichen Fehler erhalten.

Eine Möglichkeit, seltsame "inkompatible Signatur" -Fehler zu bekommen, ist, wenn Sie Ihr Ausgabeverzeichnis in den Bibliothekspfad stellen; Wenn Sie beispielsweise eine * .swc-Datei in $ (MAINFOLDER)/lib ausgeben und Sie auch $ (MAINFOLDER)/lib in Ihrem Bibliothekspfad aufgelistet haben. Ich vermute, der Grund dafür ist, dass zunächst die Schnittstellen in Ihrem Code verwendet werden, aber nach der Hälfte des Builds werden die (inkompatiblen) kompilierten Schnittstellen verwendet.

+0

Ja. Das war was falsch war. –

0

Ich sehe kein Problem ... sigs sind vollständig kompatibel ... kompiliert gut auf meiner Maschine, mit gumbo für WinXP ... außer es sollte öffentlich sein Funktion ImportX ... und ExportX ist unbekannt ... was passiert, wenn er versucht, das manuell zu kompilieren? Nicht, dass ich denken würde, dass Fehler von Cygwin oder dem Makefile kommen, aber wer nows ... Sie möchten vielleicht ANT verwenden, da dies plattformübergreifend ist ... lesen Sie mehr here (Seite 4 ist, wo es in der Tat interessant wird). ..

ich denke, das Problem an anderer Stelle ist ... oder vielleicht seine Kompilierung Ausgabe hier posten ...

edit: ok, dann sollten Sie auf jeden Fall seine Compiler Ausgabe veröffentlichen, weil ich nicht tun verstehe, wie das nicht kompilieren kann ...

eine Anmerkung obwohl: ich lese jetzt Ihre Notiz, was Sie vorhaben zu tun. .. ich denke, es wird nicht funktionieren, in der Tat ... Sie werden das gleiche Problem bekommen, weil Sie eine Schnittstelle über 2 swfs teilen möchten ... die Implementierung einer Schnittstelle bedeutet eigentlich nicht einfach, dass Sie die Methoden implementieren, aber es Objekt bedeutet, dass die Züge kennt sie implementiert seine Schnittstelle ... so werden Sie die gleichen Fehler erhalten ...

greetz

back2dos

+0

Ich schrieb die relevanten Teile des Codes hier, aber gab nicht den ursprünglichen oder vollständigen Code. Es ist "public function" im Original (good catch), die Import-Klasse ist definiert, und "X" wird durch etwas anderes ersetzt. –

+0

Nach der Auswertung der FlexAnt-Aufgaben fand ich sie schlecht dokumentiert, schwierig zu verwenden und nicht unseren Bedürfnissen angepasst.Wir konnten das Sonatype Flex Mojos-Plugin für Maven2 anpassen, um Flex zu erstellen, und fanden es den Flex-Ant-Aufgaben weit überlegen. Das Flex Mojos Plugin geht jedoch nur bis Flex 3.3. –

+0

Im ersten Kommentar meinte ich die Export-Klasse, nicht die Import-Klasse. –