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

Mic*_*ali 3 c# flash activex

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

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

谢谢F.

tyr*_*nid 9

我假设你想要做的是用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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