2012-01-11 2 views
1

エクスポートされたシンボルを* .swfファイルにアクセスする方法はありますか?* .swfファイル内のすべてのシンボルにアクセス

私はのFlash IDEの図書館のActionScriptからエクスポートをマークされているすべてのシンボルを意味します。そうすれば、あらかじめシンボルの名前を知らなくても、getDefinition()クラスを使うことができます。

これは、* .swfファイルのすべてのシンボルに対していくつかの操作を実行する必要があるフレームワークに沿って動作する、AS3で作成された内部ツール用です。
パフォーマンスは不要で、ハッキングされたソリューション(swfのByteArrayにアクセスするなど)が有効です。 として

おかげ


ダニエルが提案、私は* .swfファイルのバイトコードを解析し、クラスの読み取りにas3swfを使用して終了。

ここでは、シンボル名を含む配列を返します。getDefinition()で使用できるようになりました。 ByteArray* .swfファイルを渡す必要があります。新しい11.3フラッシュAPI

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; 
    } 

、この機能が内蔵されています。

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

あなたはswfデコンパイラがあなたのニーズに合うと思いますか? – ToddBFisher

+1

逆コンパイラを(swfファイルである)私のツールから呼び出すことができ、外部swfからのシンボルの名前を持つリストを返す場合は、yesを返します。 – Veehmot

答えて

3

swfのバイトコードを読み込み、それを直列化してクラス名を読み取ることで可能です。

これはやっかいな作業ですが、すでにそうしている低レベルのライブラリを調べることをお勧めします。 as3commonsバイトコードクラスがこれを行います。

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

as3swfも、このデータを取得することができます。あなたはクラスを見て、彼らがどのようにそれを行うか、または単にクラスを使用するかを見ることができます。

私は実際にそれらを使用していないので、共有するコードはありませんが、これが役立つことを願っています。

+0

私が探していたようだが、私は現在それを調べている。 – Veehmot

+0

それは本当に簡単でした。私が作った機能で質問を更新しました。ご協力いただきありがとうございます。 – Veehmot

+1

ソリューションを共有していただきありがとうございます – Daniel

関連する問題