Запись Flash-объекта AxShockwaveFlash в файл C # - PullRequest
2 голосов
/ 01 февраля 2010

Мне было интересно, есть ли способ чтения-записи (или сохранения / загрузки) AxShockwaveFlash Flash Object в (двоичный / текстовый) файл? У меня есть Winform с AxShockwaveFlash Flash Object на нем, и я хочу сохранить его в
файл, но сериализация не работает, так как тип AxShockwaveFlash не помечен для сериализации?
(Обычно пытается динамически записать .swf в файл.)

Есть идеи?

Спасибо и всего наилучшего
Амит

1 Ответ

1 голос
/ 03 февраля 2010

Я попробовал это, и это сработало для меня.

Я извлек класс из 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

Затем попробуйте Обычная двоичная сериализация / десерилизация .

Во время десериализации я пытался добавить сериализованную флэш-память в другую форму.
Но продолжайте получать 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);

Надеюсь, это поможет:)

ТНХ
amitd

...