热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VC编程技术点滴(五)如何打包网页中的MFC控件

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

利用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文件内容如下:

   
     
      
     
     
       
     
   

    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


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
author-avatar
kmv2145234
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有