各位朋友:
 
         大家好,小弟正在做一个在线播放的网站,根据客户的要求,服务器端存放的素材是经过加密的,当客户通过浏览器点击所要播放的文件后,客户端要能够在内存中对素材进行解密并直接在网页中播放,即实现密文的在线播放,我现在是这样解决这个问题的,我做了一个ATL控件(MyAtl.DLL),在控件中定义了一个类,并在类的构造函数中加入了LoadLibrary(newDll.DLL),并将这两个DLL和一个SETUP.INF文件打包成test.CAB文件,SETUP.INF文件的内容如下:
[version] 
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0  
[Add.Code]
MyAtl.dll=MyAtl.dll
newDll.dll=newDll.dll
setup.inf=setup.inf
[install.files]
MyAtl.dll=MyAtl.dll
newDll.dll=newDll.dll
setup.inf=setup.inf
[MyAtl.dll]
clsid={5494768C-F759-4DC0-955C-19019640774C}
file-win32-x86=thiscab
FileVersion=1,0,0,1
DestDir=11
RegisterServer=yes
[newDll.dll]
file-win32-x86=thiscab
DestDir=11
FileVersion=1,0,0,1
RegisterServer=yes
[setup.inf]
file=thiscab
[RegisterFiles]
%11%\MyAtl.dll
; end of INF file
并在页面的HEAD中增加了这些代码,
<OBJECT id=MyAtl align="CENTER" WIDTH=0 HEIGHT=0  codeBase="test.CAB#version=9,0,0,1" classid="CLSID:5494768C-F759-4DC0-955C-19019640774C"></OBJECT>并在客户端修改了安全级别和ACTIVEX的一些选项,可以下载和执行未签名的控件,这个被加载的newDll本身是用来给IE进程挂钩子的,挂钩子的程序本身没有什么问题,那些代码已经使用了多半年了,从来没有什么问题,现在奇怪的是, 我在我的计算机上访问该网页,并点击播放的时候没有任何问题, 不管是视频还是图片都可以正常打开,而别人的计算机访问该网页的时候不能正常播放,我自己做了一个工具来查看指定的进程都加载了哪些DLL, 结果发现我的计算机上的IE一直都加载这MyAtl.DLL和newDll.dll, 而别人的机器再执行了MyATL.DLL后只加载了MyAtl.DLL,而没有加载newDll.dll,随后我在控件中增加了一个方法专门用来加载newDll.dll,并在页面中增加了
<script language="javascript">
    function doTest()
    {
MyAtl.loadDll();
    }
</script>  和<input type="button" value="renjie" id="btnOK" onclick="doTest();"></input>
来调用这个函数以加载newDll.dll, 同样我的机器没有任何问题,而别人的计算机在刚执行完控件后两个DLL后都加载了,
选择打开图片时还能正常显示,显示完图片后newDll.DLL就在IE中找不到了,之后就再也不能播放其他任何文件了,而且FLASH和其他视频在其他计算机上从来都没有打开过,我不知道是什么操作将新加进来的newDll.dll给剔出了,而我自己的计算机为什么就没有问题,这个问题困扰我好几天了我实在找不出我的计算机上的设置和其他计算机有什么不同,所以希望大家能给我出点主意帮我解决问题,再次谢谢大家了,分不够了我再加,谢谢大家