我最近将一些代码从一个 Flex 项目移植到一个新的纯 AS3 项目。当我尝试拨打 AMF 电话时,我收到如下错误消息:
TypeError:错误 #1034:类型强制失败:无法将 Object@5425371 转换为 mx.messaging.messages.ErrorMessage。
没有与错误相关的堆栈跟踪,因此调试很困难。
我尝试了各种方法(检查是否包含了 flex 框架中所有必需的库等),但没有任何效果。
我最近将一些代码从一个 Flex 项目移植到一个新的纯 AS3 项目。当我尝试拨打 AMF 电话时,我收到如下错误消息:
TypeError:错误 #1034:类型强制失败:无法将 Object@5425371 转换为 mx.messaging.messages.ErrorMessage。
没有与错误相关的堆栈跟踪,因此调试很困难。
我尝试了各种方法(检查是否包含了 flex 框架中所有必需的库等),但没有任何效果。
一段时间后,我找到了答案:Flex 在启动时进行了一些初始化,如果没有这些初始化,AMF 类将无法运行。幸运的是,Adobe 已经考虑到那些想要从非 Flex 项目或 Flash 中使用 AMF 的人,并提供了一种方法来执行 AMF 所需的初始化。
我将这一行添加到我的应用程序的开头,突然间所有 AMF 调用都像在我的 Flex 项目中一样正常工作:
RpcClassAliasInitializer.registerClassAliases();
(是的,我回答了我自己的问题。我没有找到任何关于这个问题的博客或搜索结果,所以我在这里分享这个问题并修复。)
我知道这有点晚了,但你不能也使用flash.net.registerClassAlias吗?似乎RpcClassAliasInitializer是mx.utils 包的一部分,它仍然是 Flex 库的一部分。