HOWTO: Packaging MFC Controls for Use Over the InternetID: Q167158
|
When you embed ActiveX Controls in a Web page using the <OBJECT> tag, the CODEBASE attribute used to specify the download location can point to a .cab file. This is the recommended way to package MFC ActiveX Controls. Packaging an MFC ActiveX Control in a cabinet file allows an .inf file to be included to control installation of the ActiveX Control, allows for dependent DLLs to be named and a location for them provided, allows for code signing, and automatically compresses the code for quicker download.
ActiveX controls are embedded in Web pages using the <OBJECT> tag. The
CODEBASE attribute of the <OBJECT> tag specifies the location from which to
download the control. CODEBASE can point to a number of different file
types successfully.
For instance, CODEBASE can point directly to an .ocx file as follows:
CODEBASE="http://example.microsoft.com/somecontrol.ocx#version=4,70,0,1086"
Because this downloads and installs only the .ocx file, this solution
relies on any necessary supporting DLLs already existing on the client
machine. In most cases, it should not be assumed that these DLLs will exist
on the client and be the correct version.
CODEBASE="http://example.microsoft.com/doyoutrustme.inf"
An .inf file controls the installation of an .ocx file and its supporting
files. This method is NOT recommended because it is not possible to sign an
.inf file (see the REFERENCES section for references on code signing).
CODEBASE="http://example.microsoft.com/acontrol.cab#version=1,2,0,0"
Note here that the #Version information applies to the version of the
control specified by the CLASSID parameter of the <OBJECT> tag.
<OBJECT ID="Spindial1" WIDTH=200 HEIGHT=200
CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
CODEBASE="<LINK TYPE="GENERIC" VALUE="http://example.microsoft.com/spindial.cab#Version=1,0,0,001">">http://example.microsoft.com/spindial.cab#Version=1,0,0,001"></LINK>
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
<PARAM NAME="NeedlePosition" VALUE="2">
</OBJECT>
In this case, Spindial.cab must contain two files, Spindial.ocx and
Spindial.inf. The command to build this cabinet file is similar to the
following depending on the path to your installation of the Cabinet
Development Kit:
C:\CabDevKit\cabarc.exe N spindial.cab spindial.ocx spindial.inf
; ========================= spindial.inf ========================
; This .inf file will control the installation of the MFC Spindial
; control. This control has been compiled with Visual C++ version 4.2.
; The FileVersion tags in the dependent DLLs section on this file
; reflect this requirement.
[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
spindial.ocx=spindial.ocx
; These are the necessary supporting DLLs for MFC 4.2 ActiveX Controls
mfc42.dll=mfc42.dll
msvcrt.dll=msvcrt.dll
olepro32.dll=olepro32.dll
; thiscab is a keyword which, in this case, means that Spindial.ocx
; can be found in the same .cab file as this .inf file
; file-win32-x86 is an x86 platform specific identifier
; See the ActiveX SDK - ActiveX Controls - Internet Component Download -
; Packaging component code for automatic download
[spindial.ocx]
file-win32-x86=thiscab
; *** add your controls CLSID here ***
clsid={06889605-B8D0-101A-91F1-00608CEAD5B3}
; Add your ocx's file version here.
FileVersion=1,0,0,001
RegisterServer=yes
; dependent DLLs
[msvcrt.dll]
; This is an example of conditional hook. The hook only gets processed
; if msvcrt.dll of the specified version is absent on client machine.
FileVersion=4,20,0,6164
hook=mfc42installer
[mfc42.dll]
FileVersion=4,2,0,6256
hook=mfc42installer
[olepro32.dll]
FileVersion=4,2,0,6068
hook=mfc42installer
[mfc42installer]
file-win32-x86=<LINK TYPE="GENERIC" VALUE="http://activex.microsoft.com/controls/vc/mfc42.cab">http://activex.microsoft.com/controls/vc/mfc42.cab</LINK>
; If dependent DLLs are packaged directly into the above cabinet file
; along with an .inf file, specify that .inf file to run as follows:
;InfFile=mfc42.inf
; The mfc42.cab file actually contains a self extracting executable.
; In this case we specify a run= command.
run=%EXTRACT_DIR%\mfc42.exe
; ====================== end of spindial.inf =====================
The following sections of this .inf file will need to be modified depending
on your control and the version of MFC that you are using to build your
control:
spindial.ocx=spindial.ocx
[spindial.ocx]
clsid={06889605-B8D0-101A-91F1-00608CEAD5B3}
FileVersion=1,0,0,001
[ uuid(06889605-B8D0-101A-91F1-00608CEAD5B3),
helpstring("Spindial Control"), control ]
coclass Spindial
The FileVersion for the control can be obtained from the version resource
for the control. As is true of any file with a version resource, this can
be obtained by opening the file (Spindial.ocx in this case ) version
resource with Visual Studio. From the File menu, select Open, and click
Open as: Resources. Open the Version resource; the FileVersion that you
are interested in is listed after FILEVERSION.
Olepro32.dll 4,1,0,6038
Mfc40.dll 4,1,0,6139
Msvcrt40.dll 4,10,0,6038
Olepro32.dll 4,2,0,6068
Mfc42.dll 4,2,0,6256
Msvcrt.dll 4,20,0,6164
Olepro32.dll 5,0,4055,1
Mfc42.dll 4,21,0,7022
Msvcrt.dll 5,0,0,7022
Olepro32.dll 5,0,4055,1
Mfc42.dll 4,21,0,7160
Msvcrt.dll 5,0,0,7128
Olepro32.dll 5,0,4055,1
Mfc42.dll 4,21,0,7160
Msvcrt.dll 5,0,0,7128
Olepro32.dll 5,0,4230,1
Mfc42.dll 4,21,0,7303
Msvcrt.dll 5,0,0,7303
Olepro32.dll 5,0,4261,0
Mfc42.dll 6,0,8168,0
Msvcrt.dll 6,0,8168,0
- ActiveX SDK - Packaging component code for automatic download
Additional query words: 4.00
Keywords : kbole kbCAB kbMFC kbSDKInet kbVC410 kbVC420 kbVC500 kbVC600 InetSDKCAB AXSDKCompDownload
Version : WINDOWS:3.0,3.01,3.02,4.0,4.01; winnt:4.1,4.2b,5.0,5.0sp1,5.0sp2,5.0sp3,6.0
Platform : WINDOWS winnt
Issue type : kbhowto
Last Reviewed: July 20, 1999