Microsoft KB Archive/157959

{|
 * width="100%"|

How To Package MFC Controls for Use Over the Internet
'Article ID: Q157959

Creation Date: 21-OCT-1996

Revision Date: 10-DEC-1996' The information in this article applies to:


 * Microsoft Visual C++, 32-bit Edition, versions 4.0, 4.1, 4.2
 * Microsoft ActiveX SDK 1.0

SUMMARY

ActiveX Controls are embedded in Web pages using the  tag. The CODEBASE parameter of the  tag specifies the location from which the control can be downloaded. CODEBASE can point at a number of different file types successfully:

  CODEBASE can point directly at an .ocx file: "CODEBASE='http://www.somesite.com/somecontrol.ocx#version=4,70,0,1086'" This solution relies on any supporting DLLs already being on the client machine. For Internet Explorer 3.0 and MFC ActiveX Controls built with Visual C++ 4.0 and 4.1, this is a good solution. Internet Explorer 3.0 ships with the supporting DLLs for Visual C++ 4.0 and 4.1 controls. If another Internet browser that is ActiveX-Control capable is used to view this control, this may not be the best solution.   CODEBASE can point to an .inf file "CODEBASE='http://www.notasafesite.com/doyoutrustme.inf" An .inf file will control 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. Please see the REFERENCES section below for references on code signing.   CODEBASE can point to a cabinet file: "CODEBASE='http://www.somesite.com/acontrol.cab#version=1,2,0,0'" Note that the #Version information applies to the control specified by the CLASSID parameter of the  tag. 

This is the recommended way to package MFC ActiveX Controls and is the focus of this article. Packaging an MFC ActiveX Control in a cabinet file allows an .inf file to be included to control installation of the ActiveX Control, allows dependent DLLs to be named and a source provided, allows code signing, and automatically compresses the code for quicker download. MORE INFORMATION

Cab Packaging Overview

The CABinet Development Kit can be obtained from #|http://www.microsoft.com/workshop/java/cab-f.htm. In this kit, you will find the necessary tools to construct cabinet files.

The cabinet file pointed to by CODEBASE should contain the .ocx file and an .inf file that will control the installation of the ActiveX Control. Dependent DLLs that may already exist on the system should not be included in this cabinet file. The MFC DLLs are such a case: they should be packaged in a separate cabinet file and referred to by the controlling .inf file.

The following example illustrates how to package the MFC Spindial sample control:

The  tag to include the Spindial control in a Web page will look similar to the following:

    <PARAM NAME="_StockProps" VALUE="0"> <PARAM NAME="NeedlePosition" VALUE="2"> </OBJECT> In this case, Spindial.cab contains 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 -s 6144 N spindial.cab spindial.ocx spindial.inf The "-s 6144" parameter passed to Cabarc.exe reserves space in the cabinet for code signing. The following is an example .inf file for the MFC Spindial control. This .inf file can be modified to download any MFC ActiveX Control by changing Spindial s information to the desired MFC ActiveX Control s information. See comments below.

; ========================= spindial.inf =========================

; This inf file controls 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.

; note - keep comments in .inf files on separate lines

[version] ; version signature (same for both NT and Windows 95) 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 msvcrt.dll=msvcrt.dll mfc42.dll=mfc42.dll olepro32.dll=olepro32.dll

; thiscab is a keyword that, 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=http://activex.microsoft.com/controls/vc/mfc42.cab

; 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 ====================== Note the location for the MFC 4.2 DLLs: [mfc42installer] file-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cab The Mfc42.cab file is provided and signed by Microsoft. The versions and files contained within follow what is listed in the .inf file above: [msvcrt.dll] - FileVersion=4,20,0,6164 [mfc42.dll] - FileVersion=4,2,0,6256 [olepro32.dll] - FileVersion=4,2,0,6068 A signed cab file for MFC 4.0 and 4.1 ActiveX Control dependencies will be provided at a later time and will be referenced in this article. It is not necessary to provide these files for controls running under IE 3.0. However, if you are running a browser other than Internet Explorer 3.0 that supports ActiveX Controls, you may need to provide these DLLs. REFERENCES

ActiveX SDK, Packaging component code for automatic download

ActiveX SDK, Safety API Reference

ActiveX SDK, Signing with Microsoft Authenticode(TM) Technology

ActiveX SDK, Cabinet (.cab) File Technology: Data Compression and Disk

Layout.
 * }

-

"THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED 'AS IS' WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY." '' ©1997 Microsoft Corporation. All rights reserved. Legal Notices.

''

KBCategory: kbole kbhowto

KBSubcategory: AXSDKControls AXSDKCompDownload

Additional reference words: 1.00 4.00 4.10 4.20 kbdsi