微软官方发布ActiveX方法

本文的发布号曾为 CHS167158

展开全部 | 关闭全部

在使用 OBJECT标记将 ActiveX 控件嵌入网页中时,用于指定下载位置的 CODEBASE 属性可以指向 .cab 文件。建议使用这种方法打包 MFC ActiveX 控件。在 CAB 文件中打包 MFC ActiveX 控件时,允许控件中包含 .inf 文件以便对 ActiveX 控件的安装进行控制;允许对相关 DLL 进行命名并提供位置;允许代码签名以及自动压缩代码以便更快地进行下载。

回到顶端

ActiveX 控件是使用 OBJECT 标记嵌入到网页中的。OBJECT 标记的 CODEBASE 属性指定从中下载控件的位置。CODEBASE 可以成功地指向一组不同的文件类型。 

例如,CODEBASE 可以直接指向 .ocx 文件,如下所示:

CODEBASE="http://example.microsoft.com/somecontrol.ocx#version=4,70,0,1086"

                          

因为这将仅下载和安装 .ocx 文件,所以这种解决方案依赖于客户机上已有的任何必要的支持 DLL。在多数情况下,应该假设这些 DLL 不会存在于客户端上,而且不是正确的版本。 

另一种可供选择的方法是将CODEBASE 指向 .inf 文件,例如:

CODEBASE="http://example.microsoft.com/doyoutrustme.inf"

                          

.inf 文件控制 .ocx 文件及其支持文件的安装。不推荐使用这种方法,因为这种方法不能对 .inf 文件进行签名(请参见“参考资源”一节以获得有关代码签名的参考资料)。 

最佳的解决方案是CODEBASE 指向 CAB 文件。使用这种方法,可以引用支持 DLL 并对 CAB 文件进行签名。 

注意:如果遵循以下引用 MFC DLL 的说明,当客户端上已有 MFC DLL 时,则不对它们进行下载。CODEBASE 行类似如下内容:

CODEBASE="http://example.microsoft.com/acontrol.cab#version=1,2,0,0"

                          

注意,其中的#Version 信息适用于 OBJECT标记的 CLASSID 参数所指定的控件版本。

回到顶端

Cab 打包概述

在Cabinet 软件开发工具包(也称为Cabinet SDK 或 CAB 开发工具包)中,可以找到构造 CAB (.cab) 文件所需的工具。请参见以下 Microsoft 网站:

Microsoft Cabinet SDK
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncabsdk/html/cabdl.asp

CODEBASE 指向的 CAB 文件应当包含 .ocx 文件和控制 ActiveX 控件安装的 .inf 文件。在此 CAB 文件中,不应包含系统中已有的相关 DLL(如 MFC DLL)。相反,MFC DLL 和其他相关 DLL 应当包装在单独的 CAB 文件中,并且可以由控件的 .inf 文件引用。以下示例说明如何打包 MFC Spindial 示例控件。 

将 Spindial 控件包含到网页中的 OBJECT 标记类似以下内容:

   <OBJECTID="Spindial1" WIDTH=200 HEIGHT=200

  CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"

  CODEBASE="http://example.microsoft.com/spindial.cab#Version=1,0,0,001">

 

         <PARAMNAME="_Version" VALUE="65536">

         <PARAM NAME="_ExtentX"VALUE="2646">

         <PARAMNAME="_ExtentY" VALUE="1323">

         <PARAMNAME="_StockProps" VALUE="0">

         <PARAMNAME="NeedlePosition" VALUE="2">

   </OBJECT>

                          

在此示例中,Spindial.cab必须包含两个文件:Spindial.ocx和 Spindial.inf。创建此 CAB 文件的命令类似以下内容(具体取决于 Cabinet 开发工具包的安装路径):

C:\CabDevKit\cabarc.exe N spindial.cab spindial.ocxspindial.inf

                          

以下是有关 MFCSpindial 控件的示例文件 .inf。通过将 Spindial 信息更改为所需的 MFC ActiveX 控件信息,可以修改此 .inf 文件以下载任何 MFC ActiveX 控件。请参见以下注释。

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

 

   ; This .inf filewill control the installation of the MFC Spindial

   ; control. Thiscontrol has been compiled with Visual C++ version 4.2.

   ; TheFileVersion tags in the dependent DLLs section on this file

   ; reflect thisrequirement.

 

   [version]

   ; versionsignature (same for both NT and Win95) do not remove

  signature="$CHICAGO$"

   AdvancedINF=2.0

 

   [Add.Code]

  spindial.ocx=spindial.ocx

   ; These are thenecessary supporting DLLs for MFC 4.2 ActiveX Controls

  mfc42.dll=mfc42.dll

  msvcrt.dll=msvcrt.dll

  olepro32.dll=olepro32.dll

   ; thiscab is akeyword which, in this case, means that Spindial.ocx

   ; can be foundin the same .cab file as this .inf file

   ; file-win32-x86is an x86 platform specific identifier

   ; See theActiveX SDK - ActiveX Controls - Internet Component Download -

   ; Packagingcomponent code for automatic download

 

   [spindial.ocx]

  file-win32-x86=thiscab

   ; *** add yourcontrols CLSID here ***

   clsid={06889605-B8D0-101A-91F1-00608CEAD5B3}

   ; Add your ocx'sfile version here.

  FileVersion=1,0,0,001

  RegisterServer=yes

 

   ; dependent DLLs

   [msvcrt.dll]

   ; This is anexample of conditional hook. The hook only gets processed

   ; if msvcrt.dllof 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=VALUE=http://activex.microsoft.com/controls/vc/mfc42.cab

   ; If dependentDLLs 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.cabfile actually contains a self extracting executable.

   ; In this casewe specify a run= command.

  run=%EXTRACT_DIR%\mfc42.exe

 

   ;====================== end of spindial.inf =====================

                          

根据控件以及创建控件所使用的 MFC 版本,需要对此 .inf 文件的以下部分加以修改:

·        对Spindial 的任何引用均应更改为控件的名称。这包括注释和以下内容:

·            spindial.ocx=spindial.ocx

·            [spindial.ocx]

                                 

·        应该将以下内容更改为控件的正确 CLSID 和文件版本:

·            clsid={06889605-B8D0-101A-91F1-00608CEAD5B3}

·            FileVersion=1,0,0,001

                                        

可以从上述控件的 ODL 文件中获得控件的 CLSID。CLSID 与控件的 coclass 有关。例如,上述 CLSID 是从 Spindial.odl 的以下部分中获得的:

   [uuid(06889605-B8D0-101A-91F1-00608CEAD5B3),

 

    helpstring("Spindial Control"), control ]

     coclassSpindial

                                        

可以从控件的版本资源中获得控件的文件版本。当版本资源对任何文件都适用时,可以使用 VisualStudio 打开文件(此例中为Spindial.ocx)版本资源以获得文件版本。从文件菜单中,选择打开,然后单击打开为: 资源。打开 Version 资源;所需的文件版本就在 FILEVERSION 后面列出。

·        所要进行的最后一项更改是,为每个 MFCDLL([mfc42.dll]、[olepro32.dll] 和 [mscvrt.dll])输入正确的文件版本。注意,如果使用的是 Visual C++ 4.1 或更早版本,则需要将对 Mfc42.dll 的任何引用更改为 Mfc40.dll,将对 Msvcrt.dll 的任何引用更改为 Msvcrt40.dll。

应使用以下文件版本:

VC 4.1 和更早版本,使用:

http://activex.microsoft.com/controls/vc/mfc40.cab

Olepro32.dll  4,1,0,6038

Mfc40.dll     4,1,0,6139

Msvcrt40.dll 4,10,0,6038

                          

VC 4.2b 和更早版本,使用:

http://activex.microsoft.com/controls/vc/mfc42.cab

Olepro32.dll  4,2,0,6068

Mfc42.dll     4,2,0,6256

Msvcrt.dll   4,20,0,6164

                          

VC 5.0,使用:

http://activex.microsoft.com/controls/vc/mfc42.cab

Olepro32.dll  5,0,4055,1

Mfc42.dll    4,21,0,7022

Msvcrt.dll    5,0,0,7022

                          

VC 5.0sp1,使用:

http://activex.microsoft.com/controls/vc/mfc42.cab

Olepro32.dll  5,0,4055,1

Mfc42.dll    4,21,0,7160

Msvcrt.dll    5,0,0,7128

                          

VC 5.0sp2,使用:

http://activex.microsoft.com/controls/vc/mfc42.cab

Olepro32.dll  5,0,4055,1

Mfc42.dll    4,21,0,7160

Msvcrt.dll    5,0,0,7128

                          

VC 5.0sp3,使用:

http://activex.microsoft.com/controls/vc/mfc42.cab

Olepro32.dll  5,0,4230,1

Mfc42.dll    4,21,0,7303

Msvcrt.dll    5,0,0,7303

                          

VC 6.0,使用:

http://activex.microsoft.com/comtrols/vc/mfc42.cab

Olepro32.dll  5,0,4261,0

Mfc42.dll     6,0,8168,0

Msvcrt.dll    6,0,8168,0

                          



注意,4.2 和 6.0 之间的所有 MFC 版本均使用 Mfc42.cab。此 .cab 文件总是包含最新版本的 DLL,因为它们是向后兼容的。如果不使用更高的 MFC 版本进行编译,则您可能不想指定最新的文件版本。这样做可能会导致下载不必要的 MFCDLL。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值