2010-02-01 134 views
2

我想知道是否有任何方法可以讀寫(或保存/加載)AxShockwaveFlash Flash對象到(二進制/文本)文件?將AxShockwaveFlash Flash對象寫入文件C#

我有AxShockwaveFlash Flash對象上一個WinForm,並希望它是保存到
文件,但系列化犯規不是類型AxShockwaveFlash沒有標記爲序列化工作?
(基本上試圖動態地寫入.swf文件。)

任何想法??

感謝和問候
阿米特

回答

1

我試過這個,它爲我工作。

我從AxShockwaveFlashObjects.AxShockwaveFlash調出了一個類並實現了ISerializable接口。

實現GetObjectData和序列化構造函數。沒有太多的編碼。

[Serializable()] 
class MyCustomFlash : AxShockwaveFlashObjects.AxShockwaveFlash, ISerializable 
{ 
    public MyCustomFlash() 
    { 

    } 

    public MyCustomFlash(SerializationInfo info, StreamingContext ctxt) 
    { 
     //dont think this is required. 
     this.OcxState = (State)info.GetValue("ocxstate", typeof(State));    

    } 

    #region ISerializable Members 
    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     //dont think this is required. 
     // info.AddValue("movie", this.Movie); 
     info.AddValue("ocxstate", this.OcxState); 
    } 
    #endregion 
} 

我正在使用winform。因此請確保您使用嵌入

axShockwaveFlash1.EmbedMovie = true; 
    //loadMovie follows 

然後嘗試Normal binary serialization/deserilzation電影。

在反序列化期間,我試圖將序列化的閃存添加到另一個表單。
但不斷收到AxHost + InvalidActiveXStateException,並且控件沒有出現在窗體上。我認爲這個控件並沒有在表單中被引用。
只需將設計器初始化代碼複製到它,然後它就可以工作。

  string serialFilePath = @"E:\test\serialFiles\DataFile.dat";    
      FileStream myFS = new FileStream(serialFilePath, FileMode.Open); 
      // Create a binary formatter object to deserialize the data 
      BinaryFormatter myBF = new BinaryFormatter(); 

      MyCustomFlash flashObj; 
      //where class MyCustomFlash : AxShockwaveFlashObjects.AxShockwaveFlash, ISerializable 

      flashObj = (MyCustomFlash)myBF.Deserialize(myFS); 
      //this is code from VS designer..need to initialise flash control 
      ((System.ComponentModel.ISupportInitialize)(flashObj)).BeginInit(); 
      myFS.Close(); 
      flashObj.Enabled = true; 
      this.Controls.Add(flashObj); 
      ((System.ComponentModel.ISupportInitialize)(flashObj)).EndInit(); 

      flashObj.Name = "Axflash"; 
      flashObj.Visible = true; 
      flashObj.Location = new System.Drawing.Point(12, 12); 
      flashObj.Size = new System.Drawing.Size(309, 207); 

希望這有助於:)

THX
amitd