【问题标题】:Writing AxShockwaveFlash Flash Object to File C#将 AxShockwaveFlash Flash 对象写入文件 C#
【发布时间】:2011-01-11 14:29:23
【问题描述】:

我想知道是否有任何方法可以读取(或保存/加载)AxShockwaveFlash Flash 对象到(二进制/文本)文件?

我有一个带有 AxShockwaveFlash Flash 对象 的 Winform,并希望将其保存到
文件,但序列化不起作用,因为类型 AxShockwaveFlash 未标记为序列化?
(基本上是尝试将 .swf 动态写入文件。)

有什么想法吗??

感谢和问候
阿米特

【问题讨论】:

    标签: c# .net winforms serialization axshockwaveflash


    【解决方案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);
    

    希望这会有所帮助:)

    谢谢
    阿米特

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2012-07-28
      • 2015-05-15
      • 2011-01-23
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多