网上有很多进行控件打包和签名的步骤,不过很遗憾的是他们发布的控件大多以VB进行的开发,可以直接使用VC6的package & deployment wizard对控件进行打包。我这里的开发的控件使用的是MFC,开发环境是VS2005很遗憾的是无法使用该工具对控件进行打包。所以必须编写.inf文件然后使用微软提供的cabrac.exe对控件进行打包。
.inf文件语法,你在Google中输入General Syntax Rules for INF Files就可以得到MSDN中详细的解释。
1.控件对DLL依赖性检查
编写.inf文件的关键是看你编写的控件对DLL文件的依赖如何,要把你所以依赖的DLL一并打包到.cab包中让用户下载才可运行。如果你编写的控件所依赖的DLL在客户机上已经存在,则不用打包进入.cab包中。一般来说不采用特别的库,或自己编写DLL则,所依赖的DLL客户机上都是存在的。
VS2005检查依赖行的工具在
C:/Program Files/Microsoft Visual Studio8/Common7/Tools/Bin/
下的Depends.Exe。
双击,然后打开你的.ocx文件。该文件要release编译后,不然其依赖库一般客户机上都没有。如图:
你可以记录.ocx文件对dll文件依赖,然后去检查一台没有安装开发环境的客户机上都已经含有所依赖的dll。
本次开发的控件经检查对DLL的依赖除常见的DLL之外还有三个mfc80u.dll,msvcp80.dll,msvcr80.dll文件是控件依赖的。
2..inf文件的编写
下面是本控件.inf文件。
; Sample INF file for UpFileActiveX.DLL
[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
UpFileActiveX.ocx=UpFileActiveX.ocx
mfc80u.dll=mfc80u.dll
msvcr80.dll=msvcr80.dll
msvcp80.dll=msvcp80.dll
[msvcp80.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,762
DestDir=11
RegisterServer=yes
[msvcr80.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,762
DestDir=11
RegisterServer=yes
[mfc80u.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
[UpFileActiveX.ocx]
file-win32-x86=thiscab
clsid={4E586C5A-FD41-4E4C-B66D-63F110C8C4B9}
FileVersion=1,0,0,1
RegisterServer=yes
; end of INF file
编写完.inf文件后,将所依赖的三个DLL文件,以及.ocx文件和.inf文件放置在一起对文件进行打包。
Cabarc.exe –s 6144 n Storapp.cab mfc80u.dll msvcr80.dll msvcp80.dll upfileActiveX.ocx upfile.inf
打包完成后会提示Success,到此控件的打包工作完成。