0

我正在加载一个 .swf 并尝试根据其中的嵌入式 xml 文档查找一个类。我一直在寻找这个问题,每个人都说“你的课程不是公开的”,“你的类名正在干扰你的文档类”,或者“你没有使用相同的 ApplicationDomain”,这些都不是真的. 这是我的代码:

在 CoCMain.as 中,带有 CoCMod.fla:

    private function pluginLoadingComplete(e:Event):void {
        var testXML:XML = new XML(new e.target.content.description);
        trace(e.target.applicationDomain.hasDefinition("blah.blaah.testPlugin.TestMain"));//returns false
        trace(ApplicationDomain.currentDomain.hasDefinition("blah.blaah.testPlugin.TestMain"));//returns false
        trace(testXML.main[0]);//returns blah.blaah.testPlugin.TestMain
        var pluginClass:Class = e.target.applicationDomain.getDefinition(testXML.main[0]) as Class;//error here
    }

在 TestMain.as 中,使用 TestMod.fla(这是我正在加载的 swf):

package blah.blaah.testPlugin {

    public class TestMain {
        public function TestMain():void {
            super();
        }       

        public function onEnable():void {
            trace("blah");
        }
    }   
}

在 TestMod.fla 的第 1 帧中:

import blah.blaah.testPlugin.TestMain;

[Embed(source = 'main.xml', mimeType = "application/octet-stream")]
const description:Class;

xml文件:

<mod>
    <name>Test Mod</name>
    <description>Please ignore</description>
    <author>Bleachisback</author>
    <version>1.0</version>
    <main>blah.blaah.testPlugin.TestMain</main>
</mod>

我得到的错误:

ReferenceError: Error #1065: Variable TestMain is not defined.
    at flash.system::ApplicationDomain/getDefinition()
    at me.bleachisback.cocMod::CoCMain/pluginLoadingComplete()
4

2 回答 2

0

这听起来与我遇到的问题类似——您试图从描述性名称动态创建一个实例。

如果您没有显式实例化目标类的实例,编译器将不会在构建中包含您的目标类,因此该类不存在(因此您的错误)。因此,您可以添加该行

var xyz:TestMain = new TestMain();

但这有点违背了目的......

您可以使用该includes指令强制编译器包含您的类,以及必须包含的类列表。

于 2013-10-22T22:19:49.717 回答
0

你试过这个吗?

var pluginClass:Class = e.target.applicationDomain.getDefinition(testXML.main.text().toString()) as Class;
于 2013-10-22T22:36:25.627 回答