如题
我的EXE里面的资源有一个SWF的播放器和一些SWF文件,
我想让EXE的SWF控件去读一个SWF的播放器,
这个SWF的播放器还会去读其他的SWF文件。但我不想把全部的文件解到磁盘上,那要花很多时间。
能不能在内存里虚拟这些文件。
命名管道的方法我试过
系统是支持,但swf本身就支持这种方法。
还有其他方法吗?我试过虚拟http服务器,但这样一般的系统会出现访问网络的警告。
勾子应该也可以实现,还没试过。分不够可以加。麻烦大家讨论一下

解决方案 »

  1.   

    看样子你的需求是可以用内存映射文件解决
    如果想了解内存映射文件的用法可以去参考windows核心编程中 创建内存映射文件的做法
      

  2.   

    不知道swf控件是否支持IPersistStreamInit或IPersistStream接口,如果支持就好办。你可以QueryInterface试试看
      

  3.   

    如果要虚拟文件,可以用API Hook的方式,Hook播放器进程的CreateFile、ReadFile、CloseHandle等。
      

  4.   

    从你的需求来看,内存虚拟文件没有办法帮你,你需要一个驱动程序,将一块内存虚拟成一个磁盘,就相当于系统中多了一个磁盘分区。不过,简单来讲,如过swf文件不大,存在磁盘上并不需要太长时间,100K-500K左右的文件都是秒级完成的
      

  5.   

    我以前写过一段可以播放内存中swf文件的代码,主要是Hook了当前进程内文件操作相关的Api,楼主把代码改一改,应该可以满足要求的。
    无临时文件播放内存中的Flash(*.swf)文件 http://blog.csdn.net/lisunlin0/archive/2007/07/17/1695068.aspx
      

  6.   

    去下载一套 CxImage的源代码,其中有一个 CxFile类,现成的拷贝过来就可以用了
      

  7.   

    内存映射文件应该是解决不了的
    我知道APIHOOK是可以实现,只是实现的代码会比较多
    谢谢lisunlin0  
    谢谢ok1234567 我找找看
      

  8.   

    lisunlin0
    如果我是用CHtmlView加载一个网页,在页面里面显示FLASH,
    不知这样能不能HOOK到。不是直接用FLASH的插件
      

  9.   

    to orbit 
    文件是不大。但很少。有几百M。
    每次打开都解出来,要花的时间好久
      

  10.   

    你在处理swf文件路径里用file:////c://my.swf,应该没有什么问题的。
      

  11.   

    是的,那个代码只是进程内部的hook,不是系统级的。
    你直接在自己的程序里面用flash控件或webbrowser控件播放flash文件,或者自己利用flash控件写一个简单的flash播放器,在该播放器里面播放目标swf文件不就行了?