Много ошибок «несовместимой подписи» в Windows, но не в Mac OS X с Flex 4 Gumbo - PullRequest
0 голосов
/ 17 июля 2009

У меня есть чистый проект Action Script 3, который я компилирую с помощью Flex 4 SDK. У меня есть стандартный Makefile, который автоматически вызывает compc, mxmlc и asdoc в зависимости от ситуации. Проект компилируется без ошибок и предупреждений на моем компьютере Mac OS X 10.4+; однако, когда он делится этим с коллегой, разрабатывающим для Windows XP (с установленным Cygwin), он получает очень большой список ошибок «несовместимой подписи». Почему он получает эти ошибки? Подписи не кажутся несовместимыми.

ПРИМЕЧАНИЕ. Подписи, о которых идет речь, - это «оригинал» и «экспорт», используемые следующим образом:

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;
}

ПРИМЕЧАНИЕ. Приведенный выше код является частью моего решения Как сделать так, чтобы класс Action Script 3, используемый в двух SWF-файлах, преобразовывался в один и тот же класс, когда один SWF-файл динамически загружает другой?

Ответы [ 2 ]

1 голос
/ 19 июля 2009

Вы уверены, что он также компилируется в Mac OS X? Если вы недавно изменили свои сценарии сборки, но используете опцию «инкрементного» компилятора, он может успешно собираться на вашем Mac просто из-за кэшированной сборки. Попробуйте удалить все файлы * .cache и пересобрать на своем Mac, чтобы увидеть, если вы получите те же ошибки.

Один из способов получения странных ошибок «несовместимой подписи» - это размещение выходного каталога в пути к библиотеке; например, если вы выводите файл * .swc в $ (MAINFOLDER) / lib и в пути к библиотеке указан также $ (MAINFOLDER) / lib. Я подозреваю, что причина этого в том, что изначально будут использоваться интерфейсы в вашем коде, но в середине сборки будут использоваться (несовместимые) скомпилированные интерфейсы.

0 голосов
/ 17 июля 2009

Я не вижу никаких проблем ... SIGS полностью совместимы ... прекрасно компилируется на моей машине, с gumbo для WinXP ... за исключением того, что она должна быть публичной функция ImportX ... и ExportX неизвестно ... что произойдет, если он попытается скомпилировать это вручную? Не то чтобы я думал, что ошибки происходят из cygwin или make-файла, но кто сейчас ... вы можете использовать ANT, хотя, поскольку это кроссплатформенный ... читать дальше здесь (страница 4 где получается интересно на самом деле) ...

Я думаю, что проблема в другом месте ... или, может быть, опубликовать его вывод компиляции здесь ...

edit: хорошо, тогда вам определенно следует опубликовать вывод его компилятора, потому что я не понимаю, как это не может скомпилировать ...

хотя бы одна заметка : сейчас я читаю вашу заметку о том, что вы собираетесь делать ... я думаю, что это не сработает, на самом деле ... вы получите ту же проблему, потому что вы хотите разделить интерфейс между двумя SWF-файлами ... реализация интерфейса на самом деле не просто означает, что вы реализуете методы, но это означает, что объект признаков знает, что он реализует свой интерфейс ... так что вы получите те же ошибки .. .

Greetz

back2dos

...