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 pluginClass:Class = e.target.applicationDomain.getDefinition(testXML.main.text().toString()) as Class;
于 2013-10-22T22:36:25.627 に答える
0

これは、私が遭遇したものと同様の問題のように聞こえます-説明的な名前からインスタンスを動的に作成しようとしているところです。

ターゲット クラスのインスタンスを明示的にインスタンス化しない場合、コンパイラはターゲット クラスをビルドに含めないため、クラスは存在しません (したがって、エラーになります)。したがって、次の行を追加できます

var xyz:TestMain = new TestMain();

しかし、そのようなものは目的を破ります...

includes含める必要があるクラスのリストとともに、ディレクティブを使用して、コンパイラに強制的にクラスを含めることができます。

于 2013-10-22T22:19:49.717 に答える