• ActiveX 控件


    一、ActiveX基础

    1.1什么是ActiveX

            ActiveX是COM规范的一种实现,前身是OLE(Object Linking and Embedding)。一般读成:ActiveX Ctronl,译成:ActiveX控制,ActiveX控件。即可用于桌面也可用于网络,是封装、跨平台(兼容)与重用技术的延伸。封装与重用技术大概经历了以下几个历史阶段:

    明码复用:就是写的代码,例如一个函数,通过复制粘贴方式重用;

    静太库:把代码进行封装,只让使用者看到接口,不能看到具体内容,但是编译时静态库将一起载入,导致可执行文件庞大,且不宜升级,如果库中的内容有改动,则必须再次编译。

    动态库:动态库发行接口不变的情况下,无须再编译主程序,升级方便,而且可以实现动态载入。

    COM技术:但是动态库有环境兼容问题,C#写的动态库C++访问可能会有一定的问题,再一个如果同一台计算机中有N个程序要用到同一个动态库,那么要载入N次。COM技术能解决此问题,通过引用计数技术,只载入一次,大家共用资源,COM技术接口是统一的与语言无关,解决各种语言之间兼容问题。

    COM+、DCOM技术:COM技术不能解决网络资源共享问题,只适用于单机,COM+、DCOM技术解决了此问题。不同计算机可通过网络远程共享资源。

    ActiveX技术:在COM+、DCOM基础上发展了可视化,事件驱动,Web调用等。主要是Web上的应用,通过ActiveX技术能让Web像桌面程序一样与其他软件交互,如让Web与其他软件通过TCP/UDP方式通信; 也可以通过ActiveX让Web与串口通信。

    注:ActiveX不支持自定义数据类型,DLL支

    配套源码:http://download.csdn.net/detail/mingojiang/4743623

    转载请注明出自:http://blog.csdn.net/MingoJiang

    1.2ActiveX应用领域

            随着软件技术的发展,程序的开放性、可重用性与封装变得越来越重要,而ActiveX是提高程序的开放性、可重用性和封装性的重要手段,现在ActiveX已经应用于数据管理、图形显示、用户界面、界面加密与接口封装等。

    对某些技术进行封装,以供直接调用,因为它有兼容的统一接口,可以给C++、Delphi、C#与VB等语言调用。应用举例:

            1.有个客户端C要与服务端S通过UDP协议交互,C端发送的数据包是按某种协议封装的数据,如果不想(或者说S端不愿意去解析这种复杂的协议)向S端暴露具体协议,那么我们可以用ActiveX技术开发一个ActiveX控件,把C端上行的数据解析成S端默认的一种格式,S端下行给C端的数据,通过ActiveX解析成C端能识别的一种协议。在此解决两个问题:一、两种协议的转换,S端与C端之间相互不需要知道对方细节。二、不同平台的兼容问题,C端可能是C开发的,S端可能是C#开发的,不管什么环境ActiveX都能兼容。

            2.学校A从IC卡读卡器生产厂家买了批读卡器与IC卡,准备开发一个网站,用来读写IC卡。IC卡读卡器与PC机串口相连,点击页面上的读、写等按钮能对IC写进行操作。开发网站用C#开发,直接访问读卡器不方便,这时厂家可以提供一个ActiveX控件,封装所有对读卡器的操作,网站直接访问ActiveX控件即可。

            3.车管所部门A是专门管理各个驾校的,A部门开发了一个Web平台,以供各个驾校上传其学员学习的动态数据(每天的学习情况,理论课学了多少小时,实操学了多久等信息)。有些驾校学员动态数据可能保存在电脑上,有些可能保存在学员的IC卡上,有些保存在远程数据库上等等,不同驾校千差万别,如何让不同的驾校按A部门的要求上传数据呢?最好的方法是A部门定义一个统一的接口,例如ActiveX控件,公布ActiveX的接口、参数定义就可,各个驾校自己按照A部门公布的要求开发自身的ActiveX控件即可,A部门就不去动管数据的来源,具体实现。

            4.WebQQ如何实现的呢?一般的人的做法是借助数据库。如A与B两个QQ聊天,A向B发信息“你好”流程是这样的:A访问数据库把“你好”写入数据库,B一定时间内到数据库查看是否有属于自己的数据,然后把“你好”下载下来,B向A发信息也是一样的流程。如果这样架构是不行的,用户一多数据库无法承受,再一个实时性极差,三这种架构一看就感觉很傻。如果用ActiveX会比较好的解决这个问题,开发一个ActiveX控件启动UDP或者TCP服务,A与B需要交互时,通过服务器知道对方信息,然后建立端对端通信,A直接向B发信息,B也直接向A发信息,无需通过数据库。

    1.3ActiveX分类

            按运行方式分,可分为进程内与进程外服务器,进程内是指ActiveX与包容器同一个进程一般以Dll形式发行,进程外是指与包容器不同一个进程,其以独立方式运行,一般以exe文件方式发行。

            按运行地点分,可分为本地服务器与远程服务器,本地是指ActiveX与包容器同一计算机运行,不言而喻远程服务器那就是不同一计算机上运行。

    二、ActiveX开发工具

    2.1选择适合的开发工具

            开发ActiveX的工具一般都是Microsoft提供的,因为ActiveX也是Microsoft提出的嘛,一般有Visual C++ 、Visual Basic、Visual J++、Visual FoxPro各Office系统产品等都能生成ActiveX组件。一般比较全面、灵活的是Visual C++,使用Visual C++时也有四种选择:

            使用Microsoft基础类库----MFC

            使用ActiveX模板库----ALT

            使用BaseControl框架----BaseCtl

            自己建框架

    2.1.1MFC开发ActiveX

            是主要选择,Visual C++提供了完美的支持,但是有几个小问题,如:把ActiveX做成单实例的----不管客户程序如果创建实例,都是返回同一个实例。如果使用MFC开发对开发人员的技术要求很高;再如:且MFC开发ActiveX实现双接口并不是不可能,但是要对代码进行修改,而且可能导致类向导无法工作。

    2.1.2ALT开发ActiveX

            简单便捷,开发的ActiveX轻便,支持MFC改善了MFC的几个小问题,并不断发展将可能成为ActiveX开发的主流工具。

    2.1.3 BaseCtl开发ActiveX

            BaseCtl并不是一个成熟主流的产品,我们权且不去说它吧

    2.1.4自己写框架

            太过繁琐复杂,不建议用。

    2.1.5工具选择小结

             MFC适合组件的快速生成与实现,VC++集成开发环境对MFC的支持程序比ALT各BaseC

    tl要好,MFC包含的类库几乎能解决所以的问题,MFC包罗万象也导致了应用程序开发速度较慢,而且很难实现一些特殊需求。

            ATL提供了用于生成ActiveX组件的小型而精致的框架,然而与MFC比,更缺少对通用类的支持,ATL与VC++开发环境之间的集成也有待改进。

    2.2注册表与ActiveX

            所有ActiveX组件的信息都保存在注册表中,没了注册表ActiveX将无法工作。ActiveX的信息存储在KEY_CLASSES_ROOT键下的CLSID子键中。

    2.2.1注册表发展史

            注册表是一系列数据文件,主要功能是帮助Windows对硬件、软件、用户环境以及Windows的“外观与感觉”进行控制。在此之前这类工作主要由Win.ini、System.ini以及程序相应的.ini文件完成。主要经历了以下三个阶段的演变:

            统一记录于Win.ini与System.ini

            记录在自己的ini文件中

            记录在注册表中

    2.2.2注册表结构

            Windows注册表一般分为六大根键:KEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG。KEY_CLASSES_ROOT、HKEY

    _CURRENT_USER中存放的信息是HKEY_LOCAL_MACHINE的一部份,HKEY_CURRENT_USER存放的信息是HKEY_USERS的一部份。

    HKEY_USERS:保存用户信息,计算机中的所以用户的信息。

    HKEY_CURRENT_USER:当前用户的所有信息。

    HKEY_CURRENT_CONFIG:当前用户桌面与环境信息。

    KEY_CLASSES_ROOT:应用程序信息与系统信息。

    HKEY_LOCAL_MACHINE:计算机硬件等信息。

    微软定义

    根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件对象,可以将其插入到WEB网页或其它应用程序

    控件

    以前称为 OLE 控件或 OCX 控件是组件 (或对象) 打包别人编程功能.以便您可以重用 Web页或在其他程序中插入。 例如, 随 InternetExplorer 一起提供 ActiveX 控件可用于增强 Web页具有复杂格式功能和动画。
    ActiveX 控件结合了Java 程序和 Netscape 插件优点,还可以用许多编程语言, 包括所有Microsoft编程和在数据库语言编写程序中使用ActiveX控件。
    使用ActiveX控件可快速实现小型的组件重用、代码共享。
    除此之外,为了满足更多地需求,也出现集成于各种开发环境的ActiveX控件,由第三方提供,如ComponentOne Studiofor ActiveX、ActiveReportsCOM、TX Text Control ActiveX等。这些ActiveX控件有助于开发出商业级的Windows应用程序。应该根据实际情况,合理使用。

    文档

    用一个 ActiveX - 识别 Web浏览器如 InternetExplorer, 浏览时 ActiveX 文档使您能够使用自己的工具栏和菜单可打开程序。 这意味着您可以通过使用 ActiveX - 识别 Web 浏览器打开非HTML 文件, 如 MicrosoftExcel 或 MicrosoftWord 文件。

    脚本

    ActiveX脚本支持最常用脚本语言, 包括 Microsoft VisualBasic 脚本和 JavaScript。 ActiveX 脚本可用于集成行为若干 ActiveX 控件或 Java 程序从 Web 浏览器或服务器, 扩展其功能。

    特点

    在因特网上,ActiveX插件软件的特点是:一般软件需要用户单独下载然后执行安装,而ActiveX插件是当用户浏览到特定的网页时,IE浏览器即可自动下载并提示用户安装。 ActiveX插件安装的一个前提是必须经过用户的同意及确认。
    ActiveX插件技术是国际上通用的基于Windows平台的软件技术,除了网络实名插件之外,许多软件均采用此种方式开发,例如Flash动画播放插件、Microsoft MediaPlayer插件、CNNIC通用网址插件等。

    相关内容

    保证安全

    当通过Internet发行软件时,软件的安全性是一个非常引人注意的问题,IE浏览器通过以下的方式来保证ActiveX插件的安全:
    ActiveX使用了两个补充性的策略:安全级别和证明,来追求进一步的软件安全性;
    Microsoft提供了一套工具,可以用它来增加ActiveX对象的安全性;
    通过Microsoft的验证代码工具,可以对ActiveX控件进行签名,这告诉用户你的确是控件的作者而且没有他人篡改过这个控件;
    为了使用验证代码工具对组件进行签名,必须从证书授权机构获得一个数字证书; 证书包含表明特定软件程序是正版的信息,这确保了其他程序不能再使用原程序的标识。证书还记录了颁发日期。当您试图下载软件时,Internet Explorer 会验证证书中的信息,以及当前日期是否在证书的截止日期之前。如果在下载时该信息不是最新的和有效的,Internet Explorer 将显示一个警告
    在IE默认的安全级别中,ActiveX控件安装之前,用户可以根据自己对软件发行商和软件本身的信任程度,选择决定是否继续安装和运行此软件。
    在IE 7中,安全性有进一步的提高。

    相关技术

    比较流行的组件模型有COM(Component Object Model,对象组件模型)/DCOM(Distributed COM,分布式对象组件模型)和CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)。到这里,已经出现了与本文相关的主题COM,而CORBA与本文无关,就不作介绍。之所以从组件与对象的区别说起,是想让大家明确COM和CORBA是处在整个体系结构的最底层,如果暂时对此还不能理解,不妨继续往下看,最后在回过头看一看就自然明白了。
    现在开始阐述ActiveX、OLE和COM的关系。首先,让大家有一个 总体的概念,从时间的角度讲,OLE是最早出现的,然后是COM和 ActiveX;从体系结构角度讲,OLE和ActiveX是建立在COM之上的,所以COM是基础;单从名称角度讲,OLE、ActiveX是两个商标 名称,而COM则是一个纯技术名词,这也是大家更多的听说ActiveX和OLE的原因。既然OLE是最早出现的,那么就从OLE说起,自从 Windows操作系统流行以来,“剪贴板”(Clipboard)首先解决了不同程序间的通信问题(由剪贴板作为数据交换中心,进行复制、粘贴的操作),但是剪贴板传递的都是“死”数据,应用程序开发者得自行编写、解析数据格式的代码,于是动态数据交换(Dynamic Data Exchange,DDE)的通信协定应运而生,它可以让应用程序之间自动获取彼此的最新数据,但是,解决彼此之间的“数据格式”转换仍然是程序员沉重的 负担。对象的链接与嵌入(Object Linking and Embedded,OLE)的诞生把原来应用程序的数据交换提高到“对象交换”,这样程序间不但获得数据也同样获得彼此的应用程序对象,并且可以直接使用彼此的数据内容,其实OLE是Microsoft的复合文档技 术,它的最初版本只是瞄准复合文档,但在后续版本OLE2中,导入了COM。由此可见,COM是应OLE的需求而诞生的,所以虽然COM是OLE的基础, 但OLE的产生却在COM之前。COM的基本出发点是,让某个软件通过一个通用的机构为另一个软件提供服务。COM的第一个使用者却是OLE2,所以 COM与复合文档间并没有多大的关系,实际上,后来COM 就作为与复合文档完全无关的技术,开始被广泛应用。这样一来,Microsoft就开始“染指”通用平台技术。但是COM并不是产品,它需要一个商标名 称。而那时Microsoft的市场专家们已经选用了OLE作为商标名称,所以使用COM技术的都开始贴上了OLE的标签。虽然这些技术中的绝大多数与复 合文档没有关系。Microsoft的这一做法让人产生这样一个误解OLE是仅指复合文档呢?还是不单单指复合文档?其实OLE是COM的商标名称,自然 不仅仅指复合文档。但Microsoft自己恐怕无法解释清楚,这要花费相当的精力和时间。于是,随着Internet的发展,在1996年 春,Microsoft改变了主意,选择ActiveX作为新的商标名称。ActiveX是指宽松定义的、基于COM的技术集合,而OLE仍然仅指复合文 档。当然,ActiveX最核心的技术还是COM。ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而 ActiveX则以提供进一步的网络应用与用户交互为主。

    COM地位

    到这里,大家应该对ActiveX、OLECOM三 者的关系有了一个比较明确的认识,COM才是最根本的核心技术,所以下面的重点 COM。让对象模型完全独立于编程语言,这是一个非常新奇的思想。这一点从C++和Java的对象概念上,我们就能有所了解。但所谓COM对象究竟是什么 呢?为了便于理解,可以把COM看作是某种(软件)打包技术,即把它看作是软件的不同部分,按照一定的面向对象的形式,组合成可以交互的过程和一组支持 库。COM对象可以用C++、Java和VB等任意一种语言编写,并可以用DLL或作为不同过程工作的执行文件的形式来实现。使用COM对象的浏览器,无 需关心对象是用什么语言写的,也无须关心它是以DLL还是以另外的过程来执行的。从浏览器端看,无任何区别。这样一个通用的处理技巧非常有用。例如,由用 户协调运行的两个应用,可以将它们的共同作业部分作为COM对象间的交互来实现(当然,OLE复合文档也能做到)。为在浏览器中执行从Web服务器下载的 代码,浏览器可把它看作是COM对象,也就是说,COM技术也是一种打包可下载代码的标准方法(ActiveX控件就是执行这种功能的)。甚至连应用与本 机OS进行交互的方法也可以用COM来指定,例如在Windows和Windows NT中用的是新API,多数是作为COM对象来定义的。
    COM虽然起源于复合文档,但却可有效地适用于许多软件问题,它毕竟是处在底层的基础技术。用一句话来说,COM是独立于语言的组件体系结构,可以让组件间相互通信。随着计算机网络的发展,COM进一步发展为分布式组件对象模型,这就是DCOM,它类似于CORBA的ORB,本文对此将不再做进一步的阐述。通过上面的讲述相信大家一定对ActiveX、OLE和COM/DCOM的关系有了一个清楚的了解。
  • 相关阅读:
    4星|《态度》:吴军博士写给读高中和大学的女儿们的信
    2星|宇见《洞察力:让营销从此直指人心》:营销讲师自创的理论,逻辑较差,洞察力不用提
    1星|《社群X平台》:没有实际工作经验的职业写手拼凑而成
    3星|《一课经济学》:70年前的经济学思想普及读物,现在看还不过时
    3.5星|《戴维斯王朝》:业绩媲美巴菲特的投资人家族的故事
    3.5星|《行为设计学:零成本改变》:明确的、可操作的、短期的、可以引起情感共鸣的目标,更有助于个人或组织做出改变
    1星|《讲法:从说教到赋能》:用伪科学概念说理,对建构主义的解释与理解比较牵强
    2星|《谁站在马云背后》:总裁律师的职责、素养、趋势。信息浓度较低,案例偏老旧肤浅
    2星|简七《巴比伦富翁新解》:浅显的理财原则,目测作者长于理财培训而不是理财实战
    使用 Visual Studio 部署 .NET Core 应用 ——.Net Core 部署到Ubuntu 16.04
  • 原文地址:https://www.cnblogs.com/bolang100/p/7364798.html
Copyright © 2020-2023  润新知