Доступ ко всем символам в файле * .swf - PullRequest
1 голос
/ 11 января 2012

Есть ли способ получить доступ ко всем экспортированным символам в файле * .swf?

Я имею в виду все символы, которые отмечены Экспорт в Actionscript вБиблиотека Flash IDE .Таким образом, я мог бы использовать класс getDefinition () без необходимости заранее знать имя символа.

Это для внутреннего инструмента, созданного в AS3, который будет работать в рамках фреймворка, который требуетвыполнить некоторые операции с каждым символом файла *. swf .Таким образом, производительность не требуется, и хакерское решение (доступ к ByteArray из swf или что-то в этом роде) действительно.

Спасибо


Как Даниэль предложилЯ закончил тем, что использовал as3swf для анализа ByteCode файла * .swf и чтения класса.

Вот простая функция, которую я сделал, которая возвращает массив, содержащий имена символов, готовые киспользоваться с getDefinition () .Вы должны передать ByteArray файла *. Swf .

    private function getSymbolList(bytes:ByteArray):Array {
        var swf:SWF = new SWF(bytes);
        var ret:Array = [];
        for each(var tag:ITag in swf.tags) {
            if(tag is TagSymbolClass) {
                var symbolClass:TagSymbolClass = tag as TagSymbolClass;
                for (var i:int = 0; i < symbolClass.symbols.length; i++) {
                    ret.push(symbolClass.symbols[i].name);
                } return ret;
            }
        } return ret;
    }

С новым 11.3 Flash API ,эта функция встроена.

var definitions:Vector.<String> =
    this.loaderInfo.applicationDomain.getQualifiedDefinitionNames();

1 Ответ

3 голосов
/ 11 января 2012

Это возможно, если прочитать байт-код swf, десериализовать его и прочитать имена классов.

Хотя это сложная работа, поэтому лучше обратиться к библиотекам низкого уровня, которые уже это делают.класс байт-кода as3commons делает это.

http://www.google.com/codesearch#Ueq88nAe-j0/trunk/as3-commons-bytecode/

as3swf также могут получить эти данные.Вы можете просмотреть классы и посмотреть, как они это делают, или просто использовать классы.

На самом деле я ими не пользовался, поэтому у меня нет кода для обмена, но надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...