Actionscript 3 应用领域的不幸。将本地.swfs从共享库动态加载到单独的项目中。失败的铸件

Actionscript 3 应用领域的不幸。将本地.swfs从共享库动态加载到单独的项目中。失败的铸件,actionscript-3,flash,apache-flex,adobe,flash-builder,Actionscript 3,Flash,Apache Flex,Adobe,Flash Builder,我有两个项目,A和B,它们引用了一个库,MyExternalLibraryA和B是。swfs(两个不同的AS3项目)和MyExternalLibrary是。swc。当我的应用程序运行时,A加载B 在MyExternalLibrary中有一个Class,MyLoader,它被B广泛使用myexternalibrary.MyLoader加载服务器上存在的.swfs(我们不嵌入它们,因为它们是根据用户请求动态加载的) 请注意,我们的服务器包含A、B以及我们将要下载的所有.swf 现在,A还必须在我们的

我有两个项目,
A
B
,它们引用了一个库,
MyExternalLibrary
A
B
。swf
s(两个不同的AS3项目)和
MyExternalLibrary
。swc
。当我的应用程序运行时,
A
加载
B

MyExternalLibrary
中有一个
Class
MyLoader
,它被
B
广泛使用
myexternalibrary.MyLoader
加载服务器上存在的
.swf
s(我们不嵌入它们,因为它们是根据用户请求动态加载的)

请注意,我们的服务器包含
A
B
以及我们将要下载的所有
.swf

现在,
A
还必须在我们的服务器上加载一些
.swf
s。因此,
A
也必须在
MyExternalLibrary
中使用
MyLoader
。因此,在
A
中,我添加了对
MyLoader
的引用,以便在编译过程中包含其二进制文件。我只添加了一个对
MyLoader
的引用——实际上我没有实例化或修改它。也就是说,在
A
的代码中的某个地方(在
B
加载之前),我有:

MyLoader

我(显然)也导入
类。这将确保
MyLoader
的二进制文件将包含在
A
.swf

只要引用
A
中的
myexternalibary.MyLoader
就可以将
B
的功能与
MyLoader
--所有
.swf
加载的
B
将不会
强制转换到其关联的
,尽管它是
电影剪辑
,并且具有所有正确的字段。此外,在调试器中,加载的
MovieClip
s表明它们属于正确的
类。例如,如果我加载一个
.swf
,它将是一个
MovieClip
;此外,调试器声明它的类型为
B.mySwfs.MyClass
,但我无法
cast
将其转换为
B.mySwfs.MyClass
。我相信罪魁祸首是应用领域

请注意,注释掉这行代码会使
B
中的所有内容正确地转换

如果有人知道发生了什么事,我希望得到一些建议。我认为这个问题涉及
ApplicationDomain
,因为
A
拥有
myexternalibrary.MyLoader
,我正试图
A
MovieClip
加载到
B
中的
类中。当我注释掉
A
中对
myexternalibrary.MyLoader
的所有引用时,
B
现在拥有
myexternalibrary.MyLoader
,因此它能够强制转换到
B
中的类。这是我的直觉


谢谢,

解决方案是确保
B
ApplicationDomain
A
ApplicationDomain
相同。这是通过在
Loader.load
Loader.loadeBytes
中参数化
LoaderContext
的实例来实现的

例如,
A
使用以下代码行加载
B

m_loader.load(new URLRequest(“B.swf”)、new LoaderContext(false,ApplicationDomain.currentDomain))

这会将所有
B
类的
定义添加到
A
。因此,当
A
加载A
.swf
并且
MovieClip
转换为
B
中的
类时,一切都会工作,因为
A
B
在同一
应用程序域中。因此,由
A
加载的
对象可以
cast
转换为
B
中的


如果其他人遇到这个问题,我强烈建议大家看看GreenSock的SWFLoader:

请澄清您的问题:如果SWF
B
广泛使用
MyLoader
类,为什么您必须在SWF
B
中包含未使用的
MyLoader
?您还声明SWF
A
加载SWF
B
——因此,在第2段中,您声明“B的代码中的某个地方(加载A之前)”。也许A和B在这个问题上混淆了?PS:一般来说,这样做没有副作用。。。除非您更改了SWC代码,并且仅重新编译SWC和SWF
A
(例如)。SWC
B
则有一个类的“过时定义”,可能会出现这种类型的问题。Sunil,我的目标是使用相同的
MyLoader
A
B
之间集成加载外部文件。目前,
B
使用
MyLoader
A
使用一堆胡言乱语。在重构过程中,当
A
中使用
MyLoader
时,我遇到了许多错误(如上所述)。通过进一步的测试,我意识到添加的简单语句:
MyLoader
A
导致
MyLoader
闯入
B
。我没有对
MyExternalLibrary
MyLoader
进行任何更改,但我会确保
A
B
都引用了
MyExternalLibrary
的新版本。作为提示,如果B只在A内执行,并且A和B都使用MyExternalLibrary,然后,您可以让B引用MyExternalLibrary作为外部(共享库),这样您就只能在A中编译它。这样您就可以确保B始终使用A对库的定义。另外,请查看ApplicationDomain文档,它们可能对您正在做的事情很有用。如何加载SWF?是否将它们加载到同一应用程序域?