从内存流或字节数组加载Flash影片

我想从内存流或字节数组加载SWF对象而不是磁盘上的文件。

AxShockwaveFlash类提供了加载SWF的方法和属性,提供了作为字符串的磁盘路径,但我还没有看到另一种方法。 有一个InlineData属性,但通常该类是未记录的,我不知道这个属性的作用。 它可以完成吗?

谢谢F.

我假设你想要做的是用C#而不是Flash本身初始化它。 它可以完成,但这样做有限制(例如,您可能会遇到奇怪的安全问题)。 另一个警告是,这只是在VS 2010 / Flash 10上进行了测试,但理论上应该适用于任何版本。

好吧,我们假设您已经使用标准机制将Flash控件放在表单上。 还要将所需的flash文件添加到资源(或内联字节数组,由您决定)。

然后使用以下代码加载Flash文件。

private void InitFlashMovie(AxShockwaveFlash flashObj, byte[] swfFile) { using (MemoryStream stm = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(stm)) { /* Write length of stream for AxHost.State */ writer.Write(8 + swfFile.Length); /* Write Flash magic 'fUfU' */ writer.Write(0x55665566); /* Length of swf file */ writer.Write(swfFile.Length); writer.Write(swfFile); stm.Seek(0, SeekOrigin.Begin); /* 1 == IPeristStreamInit */ flashObj.OcxState = new AxHost.State(stm, 1, false, null); } } } 

传递表单的flash对象和包含flash文件的字节数组来加载它应该工作。

你就是男人
非常感谢你我正在寻找它但除了原生的c ++之外没有找到,我试过它并且效果很好

 private:void initflash(AxShockwaveFlashObjects::AxShockwaveFlash^ax,array^data) { MemoryStream^ ms=gcnew MemoryStream(); BinaryWriter^ bwr=gcnew BinaryWriter(ms); bwr->Write(8+data->Length); bwr->Write(0x55665566); bwr->Write(data->Length); bwr->Write(data); ms->Seek(0,SeekOrigin::Begin); ax->OcxState=gcnew AxHost::State(ms,1,false,nullptr); bwr->Close(); delete bwr; ms->Close(); delete ms; } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { axShockwaveFlash1->FlashVars="indextext=courses/en0600000000/launch.text.xml&cid=0600000000&l1=en&l2=none"; array^data= File::ReadAllBytes("F:\\Learning\\unformated\\New Folder (3)\\CCNA\\theme\\index.swf"); initflash(axShockwaveFlash1,data); SubclassHWND^ s=gcnew SubclassHWND(); s->AssignHandle(axShockwaveFlash1->Handle); } 

最后两行我正在使用以下类来防止右键菜单

 ref class SubclassHWND :public NativeWindow { public: SubclassHWND(){} protected: virtual void WndProc(Message %m) override { if(m.Msg==0x204) { return; } NativeWindow::WndProc(m); } };