zoukankan      html  css  js  c++  java
  • VC编程技术点滴(五)如何打包网页中的 MFC 控件

    利用MFC开发的ActiveX控件要正常运行必须依赖MFC库。但是你不能保证你用户的机器上装有与你开发环境相同的库,所以,当你发行一个ActiveX控件,你必须要包证这些依赖库的存在。

        可以通过打包控件及其依赖的库文件来解决这一问题。

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

        通过这种方式,当用户第一次浏览你控件所在的网页时,它会自动提示控件下载,包括*.inf文本文件中涉及的OCX控件文件以及DLL文件(控件依赖的MFC库文件,ocx控件也是一种特殊的DLL),并自动注册控件及库文件,然后控件即可以正常使用。控件及库文件只需要下载一次,当客户端上已有 MFC DLL 时,则不对它们进行下载(默认情况下,版本号同用户硬盘上的现有文件相同的文件不下载)。

        下面以《在Activex控件中画图》一文中创建的Activex控件为例说明控件打包及web发布的过程:

    一、创建 INF 文件

        INF 文件是一个文本文件,用以指定为控件的运行而需要下载的文件(如 DLL 库文件和 OCX 控件文件)。INF 文件说明都有哪些文件要捆绑在一个压缩的 CAB 文件中。

        DrawLine.inf文件内容如下:

        ; Sample INF file for YourControl.OCX

        [version]

        signature="$CHINA$"

        AdvancedINF=2.0 

     

        [Add.Code]

        DrawLine.ocx=DrawLine.ocx

        mfc42.dll=mfc42.dll

        msvcrt.dll=msvcrt.dll

        olepro32.dll=olepro32.dll

     

        ; needed DLL

        [mfc42.dll]

        file-win32-x86=thiscab

        FileVersion=6.6.8063.0

        DestDir=11

        RegisterServer=yes

     

        ; needed DLL

        [msvcrt.dll]

        file-win32-x86=thiscab

        FileVersion=7.0.3790.3959

        DestDir=11

        RegisterServer=yes

     

        ; needed DLL

        [olepro32.dll]

        file-win32-x86=thiscab

        FileVersion=5.2.3790.3959

        DestDir=11

        RegisterServer=yes

     

        [DrawLine.ocx]

        file-win32-x86=thiscab

        clsid={1D388D32-9D43-4891-BFEE-A775F78B9FBD}

        FileVersion=1,0,0,1

        RegisterServer=yes 

        ; end of INF file

     

        “thiscab”是一个关键字,表示需要的文件在包含此INF文件的CAB包中。也可通过指定一个相对路径,从一个 HTTP 位置下载所需的 DLL,例如:

        file-win32-x86=http://你的网站地址/NEEDED.DLL

        关键字“file-win32-x86”将平台标识为 x86。

        FileVersion指文件版本号。可以通过在 Windows 资源管理器中的文件上单击鼠标右键来获取文件的版本号。从显示的列表中选择“属性”,然后在显示的对话框中选择“版本”选项卡。有时需要在文件版本中额外插入一个 0,例如,在对话框中 ATL.DLL 的版本号如果显示为 2.00.7026。而在 INF 文件中,需要变为 2, 00, 0, 7026。

        控件的文件版本可以通过 Visual Studio 的版本资源获得。从文件菜单中,选择打开,然后单击打开为(Open as): 资源,打开控件OCX文件;所需的文件版本就在 FILEVERSION 后面列出。

        “DestDir”是文件要下载到的目录位置:11 指定系统目录 WINDOWS/SYSTEM 或 WINNT/SYSTEM32;10 指定 Windows或WINNT目录。如果未指定任何 DestDir(典型情况),则代码安装在固定的 OCCACHE临时目录中。 
        “clsid”是将要安装的控件的 CLSID。

    二、打包文件

        下载 Cabinet 软件开发工具包(也称为 Cabinet SDK 或 CAB 开发工具包),解压缩后可以找到构造 CAB (.cab) 文件所需的工具CABARC.EXE文件。Cabinet 软件包下载地址请参见以下 Microsoft 网站:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncabsdk/html/cabdl.asp

        把控件文件、库文件(vc6.0MFC库文件包括mfc42.dll、msvcrt.dll、olepro32.dll)、打包命令文件CABARC.EXE,以及控制 ActiveX 控件安装的 .inf 文件(后面会详细说明)放在同一目录下,运行以下DOS命令打包控件:

      CABARC -s 6144 n DrawLine.CAB mfc42.dll msvcrt.dll olepro32.dll DrawLine.ocx DrawLine.inf

    三、创建包含控件的网页

        DrawLine.htm文件内容如下:

        <HTML>
          <HEAD>
           <TITLE>test page for object DrawLineCtl</TITLE>
          </HEAD>
          <BODY>
            <OBJECT ID="OcxToolbar Control" CLASSID="CLSID:1D388D32-9D43-4891-BFEE-A775F78B9FBD"
               CODEBASE="http://localhost/testactivex/DrawLine.CAB#Version=1,0,0,001"></OBJECT>
          </BODY>
        </HTML>

        testactivex为在本地机创建的虚拟目录。

    四、测试控件下载和运行

        将网页文件DrawLine.htm和CAB包文件DrawLine.CAB拷贝到测试用的本地虚拟目录(如testactivex)中,就可以在浏览器 中输入如http://localhost/testactivex/DrawLine.htm的地址来测试控件的下载和运行。在测试前如果控件已经注册 (编译控件时Visual Studio会自动注册控件),还需要取消控件的注册。注册与取消注册的命令如下:

        注册:   regsvr32   xxxx.ocx  
        取消:   regsvr32   xxxx.ocx /u

        注意以上命令要在你的控件所在目录(如控件程序的编译目录Debug)下运行。

    五、其它问题

        如果打开网页是系统提示“windows已经阻止此软件因为无法验证发行者”,需要做如下设置:
        选择IE菜单栏“工具-Internet选项-安全-自定义级别”,在弹出的窗口中把下载未签名的ActiveX控件设置为启用(或提示),把里边有关 ActiveX控件项的有选择的都改为启用(或提示)。当然,这只是测试,没有考虑系统安全问题。可以通过为控件签名等方式来加强控件运行的安全性。

     

    参考文献:

        如何打包网页中的 MFC 控件: http://support.microsoft.com/kb/q167158/

        为ActiveX空间添加Cab文件: http://blog.csdn.net/MLiang/archive/2006/03/17/626912.aspx

        Creating Signed CAB Files for MFC and ATL Controls:

        http://msdn.microsoft.com/zh-cn/library/4kex18w6.aspx

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/luoshupeng/p/2146176.html
Copyright © 2011-2022 走看看