0

我有一个使用 Flex 4 SDK 编译的纯 Action Script 3 项目。我有一个标准的 Makefile,它会根据需要自动调用 compc、mxmlc 和 asdoc。该项目在我的 Mac OS X 10.4+ 计算机上编译干净,没有错误或警告;但是,当与在 Windows XP(安装了 Cygwin)上开发的同事共享它时,他会得到一个非常大的“不兼容签名”错误列表。为什么他会出现这些错误?签名似乎不兼容。

注意:有问题的签名是“原始”和“导出”,使用如下:

公共接口 AbstractX
{
    函数原始():对象;
    函数导出():对象
}
公共类 ImportX 实现 AbstractX
{
    公共 ImportX(obj: 对象) {
        _loadedobj = 对象;
        _exportobj = obj.export();
    }

    公共静态函数包装(obj:对象):AbstractX {
        变量结果:AbstractX = null;
        如果(对象!= null){
            if ( obj 是 AbstractX ){
                结果 = obj as AbstractX;
            }else if ( obj.original() 是 AbstractX ){
                结果 = obj.original() as AbstractX;
            }别的{
                结果 = 新 ImportX(obj);
            }
        }
        返回结果;
    }

    公共函数原始():对象{
        返回_loadedobj;
    }

    公共函数导出():对象{
        返回_exportobj;
    }

    私有 var _loadedobj : 对象 = null;
    私有变量 _exportobj : 对象 = null;
}
公共类 X 实现 AbstractX
{
   公共函数 X() : 无效 {
      //...
   }

   公共函数原始():对象{
       返回这个;
   }

   公共函数导出():对象{
       如果(!_export){
           _export = new ExportX(this);
       }
       返回_出口;
   }

   私有 var _export : 对象 = null;
}

注意:上面的代码是我如何使两个 SWF 文件中使用的 Action Script 3 类在一个 SWF 动态加载另一个 SWF 时解析为同一个类的解决方案的一部分?

4

2 回答 2

1

你确定它也可以在 Mac OS X 上编译吗?如果您最近更改了构建脚本但您使用的是“增量”编译器选项,那么它可能会因为缓存构建而在您的 Mac 上成功构建。尝试删除任何 *.cache 文件并在您的 Mac 上重新构建以查看是否遇到相同的错误。

One way that you can get strange "incompatible signature" errors is if you place your output directory in the library path; for example, if you are outputting a *.swc file into $(MAINFOLDER)/lib and you also have $(MAINFOLDER)/lib listed in your library path. I suspect the reason for this is that, initially, the interfaces in your code will be used, but halfway through the build, the (incompatible) compiled interfaces will be used.

于 2009-07-19T02:42:19.877 回答
0

我没有看到任何问题... sigs 是完全兼容的... 在我的机器上编译得很好,在 WinXP 上使用gumbo ...除了它应该是公共函数ImportX ...并且ExportX是未知的...会发生什么,如果他试图手动编译?并不是说我会认为错误来自 cygwin 或 makefile,但现在谁......你可能想使用 ANT,因为这是跨平台......在这里阅读更多(第 4 页实际上是有趣的地方)。 ..

我认为问题出在其他地方......或者可能在这里发布他的编译输出......

编辑:好的,那么你绝对应该发布他的编译器输出,因为我不明白它是如何编译的......

一个注释:我现在读了你的注释,关于你打算做什么......我认为它不会工作,事实上......你会遇到同样的问题,因为你想在 2 个 swfs 之间共享一个接口...实现接口实际上并不仅仅意味着您实现了方法,而是意味着特征对象知道它实现了它的接口...所以您将得到相同的错误...

问候

back2dos

于 2009-07-17T02:47:08.533 回答