Visual C++ ActiveX 开发指南:第一章 什么是ActiveX

第一章  什么是ActiveX

一种Internet策略  

    ActiveX是以一种Internet策略出现的。它包含了OLE,COM及Internet开发的各个方面。

    ActiveX开发涉及范围广泛  ActiveX开发的包含了许多方面,比如自动化服务器,ActiveX控件,COM对象等等。

    术语ActiveX在过去的几年中成为了许多开发人员及团队的战斗口号,另一方面市场也对其大肆宣扬,然而,没有几个人能解释清楚其确切的含义。本书主要目的就是说明什么是ActiveX以及它对开发人员意味着什么。我希望读者能够学到和我为写本书而学到的知识尽可能一样多。

应用程序开发的一种Internet策略

     Microsoft第一次介绍ActiveX是在1996年的Intenet专业开发人员大会(Internet PDC)上。ActiveX源自于大会的口号“Activate the Internet”(可理解为:让因特网活跃起来),与其说ActiveX是一种开发应用程序的技术或是架构,不如说它是一种启示。

     在开发大会期间,Microsoft正在与控制了Internet浏览器市场的Netscape进行激烈的竞争。但是,大会表明了Microsoft感兴趣的不仅仅是浏览器市场。Microsoft演示的工具从电子存储前端产品、新的OLE控件到虚拟现实聊天软件等等,应有尽有。

    ActiveX是Micrsoft共同的新口号,类似于90年代初的提出的OLE(Object Linking and Embedding,对象链接与嵌入),而且在很短的时间内,远远超越了“Activate the Internet”。

    ActiveX成为了包含一切的术语:从Web页面到OLE控件。ActiveX开始变得重要起来:一方面,小型、快速、可重用的组件能够让你紧紧抓住来自于Micrsoft,Internete及工业的最新技术;另一方面,ActiveX代表了Internet与应用程序集成的策略。目前,在产品或公司中没有使用Internet及ActiveX技术被认为是过时的。事实上,描述ActiveX就像描述色彩一样,它既不是技术也不是架构,而是一个概念,一个指导。

ActiveX, OLE及Internet

    ActiveX和OLE开始成为同义词,人们曾经谈到的OLE控件现在成为了ActiveX控件,OLE文档对象现在成为了ActiveX文档对象。有时,整个关于如何实现OLE技术的文档被更新为ActiveX技术,唯一的变化就是术语OLE,现在命名为ActiveX。

    尽管OLE及ActiveX取得了巨大的进步,表面上每天还有与其相关的新技术出现,但Internet是否已经或直接卷入到许多相关的领域还是令人置疑的。对小型、快速、可重用组件(COM组件)的需求已经些年头了,分布式组件(DCOM组件)在几年前的OLE 2.0 专业人员开发大会上作了第一次演示。Visual Basic(VB)开发组在使ActiveX技术成为可能的早期扮演了得要角色。包含在ActiveX SDK中的BaseCtl框架就是由VB开发组开发的,它解决了VB为减少载入时间而对小型,轻量级组件的需求。Internet唯一的贡献就是它需要一种方式来实现和发布Web页面。实际上,每一个ActiveX的新功能都能追溯到最基本的,全球泛围的对小型、快速,可重用组件的需求,而这,就是从OLE和COM开始的。

    ActiveX并不意味着要代替OLE,仅仅把它扩大到包括Internet,企业内部网商务应用程序及家庭应用程序的开发,以及开发这些应用的工具。

    Microsoft发布了大量关于ActiveX开发的文档。OC 96 规范定义了如何开发启动更快速,绘制能力更强的控件,它也定义了哪些接口是必需的,而哪些接口是可选的。”OLE Control and Control Container Guidelines”提供了关于控件与控件容器交互的重要信息。Microsoft的Web站点成为了信息丰富的及创建、使用、分发ActiveX组件的中心。

    除了创建ActiveX组件的技术细节外,Microsoft建立起了一套使用和集成ActiveX组件的标准。从VB、Micrsoft Word到Java的每一个产品都继承了使用ActiveX组件的能力。在ActiveX技术出现前,一大半的应用程序无法像如今这样如此紧密相关地无缝集成。

    接下来的部分将谈到我们可以创建的ActiveX组件的类型,以及我们何时,为什么才需要使用它—这可能更有帮助。

ActiveX组件的分类

    本书的主题是ActiveX组件的开发。这些组件可以分为以下几类:

    Automation Servers:自动化服务器
    Automation Controllers:自动化控制器
    Controls:控件
    COM Objects:COM对象
    Documents:文档
    Containers:容器

    本书只是详细谈到了自动化服务器,控件及COM对象。自动化控制器、文档及容器涉及到太多的接口,太多的技术,超出本书所能承受的范围。

自动化服务器

    自动化服务器是可以被其它应用程序编程驱动的组件。一个自动化服务器包含到少一个或多个基于IDispatch的接口,其目的是为了让其它的应用程序创建和连接它。根据服务器本身的特性,一个自动化服务器可以包含也可以不包含用户界面。

    自动化服务器可以是进程内的(运行在控制器的进程空间),本地的(运行在自己独立的进程空间),远程的(运行在其它机器的进程空间)。有些情况下,特定的服务器实现将会指定服务器在哪里运行,但是,这一点是不能保证的。DLL能够在进程内,本地或远程运行,而EXE则只能在本地或远程远行。

    注意:对于控制器来说,执行最快的就是进程内自动化服务器。但要记住,使用进程内服务器并不能保证其性能。如果一个进程内自动化服务器在一个进程空间内被创建,而被另一进程内的控制器所控制,它就降级为进程外服务器,其性能与进程外服务器相同。关于进程空间与服务器冲突的更多信息请参见本书的第二部分。

自动化控制器

    自动化控制器是那些能使用和操作自动化服务器的应用程序,一个很好的例子就是VB。使用VB你可以创建,使用并销毁自动化服务器,就好像它们是VB语言的完整一部分一样。

    自动化控制器可以是任意类型的应用程序,DLl或是EXE,能够以进程内,本地,远程的方式访问自动化服务器。一般地,注册表入口与服务器的实现指明了与控制器相关的自动化服务器应该在哪一个进程空间运行。

控件

    ActiveX等同与OLE控件或是OCX。一个典型的ActiveX控件由一个在设计时及运行时都存在的用户界面,一个定义了控件的所有方法及属性的IDispatch接口,一个定义了控件可以触发的事件的IConnectionPoint接口所组成。此外,它还可能支持运行生命期内的持久化,以及各种用户界面功能,例如,剪切粘贴,拖放操作。从结构上来讲,一个控件必须支持大量的COM接口以发挥这些功能的优势。

    随着新的OLE控件及ActiveX开发指南的发行,一个控件不仅限于上述那些功能。但开发人员可以仅仅实现上述的那些功能,因为它们用处最大,而且对于使用应用程序的用户来说,他们也最感兴趣。由Microsoft出版的控件与容器指南列出了所有的接口以及它们的特殊要求。你可以在Microsoft的网站http://www.microsoft.com找到这些信息。

    ActiveX控件对于容器来说,总是进程内运行的。一个控件的扩展名通常是OCX,但从执行模式上来讲,它就是一个DLL而已。

COM对象
    
    Com对象在结构上类似于自动化服务器和控制器。它们包含一个或多个COM接口,有一部分或完全没有用户界面。然而,这些对象不能被控制器以使用自动化对象的方式所使用。控制器必须理解COM接口才能与这些接口通讯,这些都与自动化接口无关。Windows 95和NT操作系统定义了成百上千的COM接口和自定义接口作为操作系统扩展,控制了从桌面外观到屏幕三维图像渲染的一切。COM对象是一种组织相关功能及数据的很好的方式,并且仍然保留了DLL对高性能的要求。

 注意:自动化服务器也能受益于COM接口,这些服务器就是双接口服务器。自动化服务器接口有一个伴随的COM接口,它描述了对象的方法及属性。象VB这样的自动他控制器在使用服务器的时候能够利用双接口的优势提供更高的性能。双接口服务器有一个缺点就是在定义属性和方法时,其数据类型被限制为被OLE自动化所支持的类型。

文档
    
    ActiveX文档或者说是最初被称为的文档对象,表示那些不仅仅只是一个控件或服务器的对象。一个文档可以是任意的,可以是电子表格或者是一个财务应用程序中的复杂的发票。文档,就像控件,有用户界面,并且有容器应用程序作为宿主。Microsoft Word和Microsoft Excel就是复杂的文档服务器,Microsoft Office Binder及Microsoft Internet Explorer就是ActiveX文档容器。

    ActiveX文档构架是对OLE链接与嵌入模型的扩展,它允许文档透过其宿主容器得到更多的控制,最明显的改变就是菜单如何呈现。标准OLE文档的菜单将会与容器的菜单合并,提供组合的功能集;而ActiveX文档则会占用整个菜单系统,因此只表示文档的功能而不是同时表示文档和容器的功能。事实上,文档所暴露的功能集是ActiveX文档与OLE文档之间差别的前提。容器只是一种宿主机制,而文档则拥有所有的控制。

    其它的不同就是打印和存储。OLE文档有意地成为其宿主容器文档的一部分,因此,作为容器文档的一部分来打印与存储。而ActiveX文档则期望支持其本身的打印与存储功能,并没有与宿主文档集成。

    ActiveX文档采用统一的表示结构,而不是OLE文档的嵌入式的文档架构。Microsoft Internet Explorer就是一个很好的例子,它只不过给用户显示Web页面,但是将页面作为一个实体进行浏览、打印及存储。Microsoft Word和Microsoft Excel则是OLE文档架构,如果Excel的电子表格嵌入到Word文档,那么电子表格将与Word文档一起存储,成为完整Word文档的一部分。

    ActiveX文档还有一些额外的功能用来支持Internet或Internat的Web页面发布。想像一下一个内部的订单跟踪系统运行在与连接Internet所使用的相同的Web浏览器中。

容器
    
    ActiveX容器是能够作为ActiveX服务器、控件或文档的宿主的应用程序。VB和ActiveX Control Pad都是能够作为ActiveX服务器和控件的容器。Microsoft Office Binder和Microsoft Internet Explorer则是能够作为ActiveX服务器、控件及文档宿主的容器。

    随着ActiveX控件和文档规范中对必要要求的减少,容器必须足够健全以处理控件或文档缺少某些接口的情况。容器应用程序可能与控件或文档只有很少或根本没有交互,也可能在表现和操作组件时提供了很重要的交互能力。这种能力完全依赖于组件的宿主容器,在任何的容器开发中都不是必要的。

posted @ 2005-11-07 09:38  Max Woods  阅读(14860)  评论(0编辑  收藏  举报