把ocx控件打包成.cab文件
1、假使我已经有了一个ocx_my.ocx文件,打开vc工具Depends工具,可以看见此控件依赖的其他控件(包括dll和其他ocx控件),如图一
图一
可以看见,那我们可以看到我们用到的DLL有6个,一般Kernel32.DLL和OLEAUT32.DLL文件每个操作系统都有(网页上说的,我也不是很确定),
所以剩下的4个DLL,在你机子上全盘搜索,找到这4个dll后将他们放入你的ocx_my.ocx相同文件夹下,编辑ocx_my.inf,
这些dll的版本信息FileVersion可以在此dll上点击右键->属性中得到。
以下可以知道还用到了其他三个DLL库,这三个库是可选的,可以打包到.cab文件中。
获取DLL的classid方法,打开vc工具OLE View,file--View TypeLib,找到ocx_my.ocx,如图二,在最后的位置控件属性有CLASSID,(注意这里有好几个CLASSID,要找属性为control对应的ID.,)
图二
如果是在ocx开发状态下,获取classid还有一个方法,如下图三,双击"_DOcx_my",在此文档的最后,可以找到ID.(同样注意,别找错了,有helpstring("Ocx_my Control"), control标识的才是呢)
图三
2、编辑编辑ocx_my.inf如下:
[version]
signature="$CHINA$"
AdvancedINF=1.0
[Add.Code]
ocx_my.ocx=ocx_my.ocx
msvcr71.dll=msvcr71.dll
mfc71.dll=mfc71.dll
msvcp71.dll=msvcp71.dll
MFC42D.dll=MFC42D.dll
MSVCRTD.DLL=MSVCRTD.DLL
gdi32.dll=gdi32.dll
MFCO42D.DLL=MFCO42D.DLL
dll_my.dll=dll_my.dll
[ocx_my.ocx]
file=thiscab
clsid={CDC25467-2E91-4832-8DB7-F2E6D956A17F}
FileVersion=1,0,0,0
RegisterServer=yes
[msvcr71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3052,4
[mfc71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3077,0
[msvcp71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3077,0
[MFC42D.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6.0.9782.0
[MSVCRTD.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6.0.9782.0
[gdi32.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=5.1.2600.5698
[MFCO42D.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6.0.9782.0
[dll_my.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=1,0,0,0
3、编辑makeCAB_myocx.bat文件
新建一个记事本,写入
cabarc N ocx_my.cab msvcr71.dll mfc71.dll msvcp71.dll MFC42D.dll MSVCRTD.DLL gdi32.dll MFCO42D.DLL dll_my.dll ocx_my.ocx ocx_my.inf,保存为名为“makeCAB_myocx.bat”的文件。
4、把cabarc.Exe文件复制到当前文件目录下:
以上的步骤完成之后双击makeCAB_myocx.bat文件就可以在当前目录下得到打包好的ocx_my.cab 文件。