J'ai essayé ceci et cela a fonctionné pour moi.
J'ai dervi une classe de AxShockwaveFlashObjects.AxShockwaveFlash et implémenté l'interface ISerializable.
Implémenté GetObjectData et le constructeur de sérialisation. pas beaucoup de codage en eux.
[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
}
J'utilisais winform. donc vous assurer que vous intégrez le film en utilisant
axShockwaveFlash1.EmbedMovie = true;
//loadMovie follows
Ensuite, essayez Normal binary serialization/deserilzation.
Lors de la désérialisation, j'ai essayé d'ajouter le flash sérialisé à une autre forme.
Mais continuez à obtenir AxHost + InvalidActiveXStateException et le contrôle n'apparaît pas sur le formulaire. Je pense que le contrôle n'a pas été initié sur le formulaire. Copiez simplement le code d'initialisation du concepteur. Ensuite, cela fonctionne.
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);
Hope this helps :)
thx
amitd