网页下载CAB文件总结

网页下载CAB文件总结
原来的程序是一个EXE,现在需要封装成COM,然后打包成CAB文件,让客户通过网页调用。耗费了两天时间终于完成了,总结一下。
1、最初我是用VC6.0的MFC ActiveX生成了OCX,OCX中有一个对话框,通过IE控件来显示一个生成的网页文件,写完之后发现通过外部IE调用OCX的时候对话框中的IE控件显示不出来需要加载的网页。
   没办法,只能让OCX返回网页文件的地址,再通过JS的window.open来显示网页。
2、实现了网页的显示,我以为已经完成了90%的工作,挺高兴,原来预计两天时间的任务不到一天就完成了,感觉挺爽,那就用一个小时的时间完成剩下的10%吧,用iexpress把OCX及相关的动态库打包成CAB文件,
   挠头的事情发生了,网页无法下载这个CAB文件!更别提注册了!反复研究INF文件,反复生成CAB,反复的失败...
   怀疑打包程序,用iexpress,用CABARC,甚至用VB自带的打包程序,结果都一样,失败,排除打包程序的问题,还是别冤枉微软了。
   怀疑INF文件有问题,重写了一个MFC ActiveX小程序,INF文件简单的不能再简单了,打包,失败,排除INF文件问题。
   ...
   一个同事问我,你的COM标准吗?靠,这个问题问的太好了!堪比“人为什么活着?”!赶紧用ATL COM生成一个小例子,打包成CAB,成功了!!!
   严重鄙视MFC ActiveX,不伦不类的东西。
3、主要技术点:
   INF文件的格式:

INF文件的格式
;INF file for tkSoundExe.exe
;DestDir can be 10 for Windows directory, 11 for Windows\System(32) directory, or left blank for the Occache directory.
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[DestinationDirs]
install.files=11
[SourceDisksNames]
1=%DiskName%,RptView.CAB,1
[Add.Code]
RptView.dll=RptView.dll
MSVCP60.DLL=MSVCP60.DLL
MSVCP60D.DLL=MSVCP60D.DLL
MSVCRT.DLL=MSVCRT.DLL
MFC42.DLL=MFC42.DLL
MSVCRTD.DLL=MSVCRTD.DLL
cppbind.dll=cppbind.dll
CacheODBC.dll=CacheODBC.dll
RisDll.dll=RisDll.dll
FTPClient.dll=FTPClient.dll
ris.ini=ris.ini
[install.files]
MSVCP60.DLL=MSVCP60.DLL
MSVCP60D.DLL=MSVCP60D.DLL
MSVCRT.DLL=MSVCRT.DLL
MFC42.DLL=MFC42.DLL
MSVCRTD.DLL=MSVCRTD.DLL
cppbind.dll=cppbind.dll
CacheODBC.dll=CacheODBC.dll
RisDll.dll=RisDll.dll
FTPClient.dll=FTPClient.dll
ris.ini=ris.ini
RptView.dll=RptView.dll
[SourceDisksFiles]
MSVCP60.DLL=1
MSVCP60D.DLL=1
MSVCRT.DLL=1
MFC42.DLL=1
MSVCRTD.DLL=1
cppbind.dll=1
CacheODBC.dll=1
RisDll.dll=1
FTPClient.dll=1
ris.ini=1
RptView.dll=1
[RptView.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={279662D5-3EAE-4BD3-A8E0-8A503AA4F616}
DestDir=11
FileVersion=1,0,0,1
[MSVCP60.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6,0,8972,0
[MSVCP60D.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6,0,8972,0
[MSVCRT.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6,1,9844,0

[MFC42.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6,0,9586,0
[MSVCRTD.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6,0,9782,0
[cppbind.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=5,0,5105,0
[CacheODBC.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=5,0,5105,0
[RisDll.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=1,0,0,1
[FTPClient.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=1,0,0,1
[ris.ini]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
[RegisterFiles]
%11%\RptView.dll


 
    在JS文件中,写下载CAB文件的代码:
     document.write("<OBJECT ID='RptView' WIDTH=0 HEIGHT=0 CLASSID='CLSID:279662D5-3EAE-4BD3-A8E0-8A503AA4F616' CODEBASE='../addins/client/RptView.CAB#version=1,0,0,1'>");
document.write("</object>");
    注意:CODEBASE最好为相对路径。
   
    在JS文件中,调用COM接口,并弹出网页文件。
    var objVar = RptView.GetRptURL("XXXXX");
    window.open(objVar,'newwindow','height=700,width=900,top=5,left=150,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no, status=no')

转载于:https://www.cnblogs.com/FlyingRoc/archive/2008/12/03/1346479.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值