FlashDLL测试

flashdll介绍:http://www.flashdll.org

昨天问胡矿关于flashdll的内容时,胡矿提出了一个问题“如果两个类名包名完全相同的类分别编译到两个SWF中,然后在加载完成后是否存在反射出的类有覆盖的问题”,我就此做了一个测试。

1.
建 立两个lib project  分别为 DLLSWCA和DLLSWCB,它们都有一个com.flashdll.test.OverrideDLLTestSWC,包名,路径,路径完全相同, 都有一个方法output(),唯一的不同就是这两个方法中trace不同的字符串用于区分它们是处于两个不同的swf中。将这两个lib porject发布出对应的swc。代码如下:

 

 

 

2.
建立两个as proj分别把刚才的两个swc编译到swf,这俩个as项目的主类没有任何其他代码。编译参数写 -include-libraries DLLSWCA.swc或-include-libraries DLLSWCB.swc,最后发布。生成出来的 两个swf分别带有两个swc的OverrideDLLTestSWC类 ,作为DLL有loader加载。


3.
建立一个测试as 项目 名字任意,将第一步生成的swc导入到lib path中,注意要将这两个swc 的 linktype设为 External这样 swc中的代码才不会编译到 主swf中,否则dll就没意义了 。但是 代码提示和语法检查还是起效的。

 

 

然后在 项目主类中 写如下代码:

 

 

编译执行, lib.output();执行结果为 输出 :THIS IS THE A DLL。
loader.addDLL("DLLSWFA.swf""library1");和  loader.addDLL("DLLSWFB.swf""library2"); 对调执行顺序 也就是先加载dllb 再加载dllb。重新编译,那么 ,lib.output();执行结果为 输出 :THIS IS THE B DLL。

结论:
如果不同的dll里有类名和路径完全相同的类,那么 先被加载dll中类对象被缓存了起来,以后加载的dll的
类名和路径完全相同类对象就不会覆盖了之前的这个类对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值