2011-05-18 6 views
7

मैं flash.net.FileReference कक्षा का स्रोत पढ़ना चाहता हूं। क्या यह संभव है? मुझे स्रोत फाइल कहां मिल सकती है, क्या वे एडोब फ्लैश या फ्लैश बिल्डर के साथ आते हैं?क्या कोर फ्लैश क्लास फ़ाइलों के स्रोतों को पढ़ना संभव है (और शायद बदल सकता है)?

+4

क्या आप इसे बदलना चाहते हैं? मैं एक कस्टम क्लास बनाने की अनुशंसा करता हूं जो FileReference बढ़ाता है और उन कार्यों को ओवरराइड करता है जिन्हें आप बदलना चाहते हैं। – Corey

+0

वैसे हाँ, ऐसा करने का आपका तरीका निश्चित रूप से क्लीनर है, लेकिन यह मुख्य बिंदु नहीं है - क्या मैं उन्हें पढ़ सकता हूं? कहीं भी? – jayarjo

उत्तर

6

फ्लैश पैकेज फ़ाइलों को पढ़ने के लिए, आप playerglobal.swc पा सकते हैं - nameglobal.zip में नाम बदलें और पैकेज को अनजिप करें। फिर, library.swf फ़ाइल को डीकंपाइल करें और स्क्रिप्ट फ़ाइलों को प्राप्त करें। यहाँ मैं FileReference के लिए क्या मिला है:

//FileReference 
package flash.net 
{ 
    import flash.events.*; 
    import flash.utils.*; 

    public class FileReference extends flash.events.EventDispatcher 
    { 
     public function FileReference() 
     { 
      super(); 
      return; 
     } 

     public function upload(arg1:flash.net.URLRequest, arg2:String="Filedata", arg3:Boolean=false):void 
     { 
     } 

     private function _load(arg1:flash.utils.ByteArray):void 
     { 
     } 

     public function load():void 
     { 
      this._load(new ByteArray()); 
      return; 
     } 

     public function get size():uint 
     { 
     } 

     public function get type():String 
     { 
     } 

     public function browse(arg1:Array=null):Boolean 
     { 
     } 

     public function get name():String 
     { 
     } 

     public function get creator():String 
     { 
     } 

     public function get creationDate():Date 
     { 
     } 

     public function download(arg1:flash.net.URLRequest, arg2:String=null):void 
     { 
     } 

     public function get modificationDate():Date 
     { 
     } 

     public function get data():flash.utils.ByteArray 
     { 
     } 

     public function cancel():void 
     { 
     } 

     private function _save(arg1:flash.utils.ByteArray, arg2:String):void 
     { 
     } 

     public function save(arg1:*, arg2:String=null):void 
     { 
      var defaultFileName:String=null; 
      var data:*; 
      var d:flash.utils.ByteArray; 

      var loc1:*; 
      data = arg1; 
      defaultFileName = arg2; 
      d = new ByteArray(); 
      if (data == null) 
      { 
       throw new ArgumentError("data"); 
      } 
      if (data is String) 
      { 
       d.writeUTFBytes(data as String); 
      } 
      else if (data is XML) 
      { 
       d.writeUTFBytes((data as XML).toXMLString()); 
      } 
      else if (data is ByteArray) 
      { 
       d.writeBytes(data as ByteArray); 
      } 
      else 
      { 
       try 
       { 
        d.writeUTFBytes(data); 
       } 
       catch (e:Error) 
       { 
        throw new ArgumentError("data"); 
       } 
      } 
      d.position = 0; 
      if (defaultFileName == null) 
      { 
       defaultFileName = ""; 
      } 
      this._save(d, defaultFileName); 
      return; 
     } 
    } 
} 

मैं अत्यधिक इस फ़ाइल को नहीं बदलते सलाह देते हैं और बल्कि यह विस्तार और कार्यों आप संशोधित करना जरुरी है। अन्यथा, आपको library.swf को पुन: संकलित करने और एक कस्टम playerglobal.swc बनाने की आवश्यकता होगी।

+0

उन डमी विधियों के लिए क्या खड़ा है? क्या FileReference वास्तव में एक आंतरिक वर्ग का एक उदाहरण है, जो बदला नहीं जा सकता है? असल में मैंने सोचा कि अपलोड() विधि सीधे स्ट्रीमिंग का प्रबंधन कैसे करती है, फ़ाइल को स्मृति में लोड किए बिना और शायद इसे मेरे ऐप में किसी भी तरह नकल कर सकती है। अगर किसी भी तरह से इसे हासिल करना संभव है तो मुझे कुछ बंदर पैचिंग करने पर कोई फर्क नहीं पड़ता। – jayarjo

0

"सामान" है कि आप को देखने के लिए मौजूद हैं (Win7 के लिए वैसे भी) उपलब्ध है की कोई भी C:\Users\<your_user>\AppData\Local\Adobe\Flash CS4\en\Configuration

में फ्लैश CS4 भाग संस्करण के आधार पर बदल सकता है। कक्षाएं कॉन्फ़िगरेशन के अंदर कक्षा फ़ोल्डर में हैं।

3

जैसा कि अन्य लोगों ने बताया है कि आप फ्लैश और फ्लेक्स फ्रेमवर्क कक्षाओं के स्रोत देख सकते हैं। सटीक स्थान अलग-अलग होगा।

विंडोज 7 पर

फ्लैश CS4 के लिए:

C:\Users\<your_user>\AppData\Local\Adobe\Flash CS4\en\Configuration

फ्लेक्स के लिए:

...\flex_sdk\frameworks\projects\framework\src

आप किसी भी FRA बदल सकते हैं जब तक आप सावधान रहें, मेवर्क क्लास चाहते हैं। फ्लैश नामकरण में इसे बंदर पैचिंग के रूप में जाना जाता है। फ्रेम प्रोजेक्ट के रूप में एक ही पूर्ण पैकेज संरचना और कक्षा के नाम के साथ अपनी परियोजना में एक कक्षा बनाएं और संकलक ढांचे वर्ग के बजाय आपकी कस्टम कक्षा को ढूंढ और उपयोग करेगा।

फ्रेमवर्क आरएसएल के साथ ऐसा करने में कुछ जटिलताएं हैं। कि यहाँ देखें:

कैसे बंदर पैच करने के लिए जब फ्लेक्स RSLs

http://blogs.adobe.com/dloverin/2010/01/how_to_monkey_patch_when_using_flex_rsls.html

का उपयोग कर यह अंतर्निहित या "आंतरिक" वर्गों के लिए लागू नहीं होता। वे उपरोक्त स्रोत स्थानों में स्टब कोड होने तक खिलाड़ी और इच्छाओं में निर्मित होते हैं। आप वास्तव में आंतरिक वर्गों को नहीं बदल सकते हैं।

+0

अंतर्दृष्टि पोस्ट के लिए धन्यवाद - बहुत जानकारीपूर्ण। फाइलरेंसेंस आंतरिक कक्षा तब है? – jayarjo

+2

@Jayarjo, हाँ, फ़ाइल संदर्भ आंतरिक है, या कम से कम आंशिक रूप से आंतरिक है। स्रोत को देखें और आप देखेंगे कि कई विधियां खाली हैं। ऐसा इसलिए है क्योंकि उनके लिए कोड रनटाइम द्वारा प्रदान किया गया मूल कोड है। –

संबंधित मुद्दे