zoukankan      html  css  js  c++  java
  • activeX

    在我们平常的阅读和编程学习中,我们经常可以看到诸如“ActiveX控件”,“ActiveX组件”等名词。那么什么是“ActiveX控件”,什么是“ActiveX组件”呢,它们有什么区别呢?
      首先,我们应该知道,组件是建立在 ActiveX技术上的代码的独立单元,用于通过特定的接口提供特定的一组服务。它提供客户端在运行时所请求的对象。在 Remote Data Service 中,当组件包括支持业务进程的关键字逻辑时也被称为“业务对象”。
      其次,ActiveX是使软件组件能够在网络环境中交互作用而与创建组件的语言无关的一套封装技术。实现ActiveX 的基础是“组件对象模型”(Component Object Model ,缩写为COM)。它也是提供封装 COM组件并将其置入应用程序(如(但不限于)Web 浏览器)的一种方法。
      最后,上面一段话中提到的COM(Components Object Model)是软件组件互相通讯的一种方式。它是一种二进制和网络标准,允许任意两个组件互相通讯,而不管它们是在什么计算机上运行(只要计算机是相连的),不管各计算机运行的是什么操作系统(只要该操作系统支持 COM),也不管该组件是用什么语言编写的。COM 还提供了位置透明性:在编写组件时,其他组件是进程内 DLL、本地 EXE 还是位于其他计算机上的组件,都不会产生太大影响。
      这样一来,我们可以给ActiveX组件(ActiveX component)一个定义,就是:一个应用程序或开发工具,可以使用另一个应用程序支持的对象,或者提供自己的对象供另一个应用程序使用。以前这些程序和对象称为“OLE 自动服务程序”和“OLE 自动服务器”。
      至于ActiveX控件,则只是ActiveX组件的一个分类,是一个标准的用户接口元素,是具有 .OCX 文件扩展名或者可插入对象的文件,能够快速地把窗体和对话框组装起来;当使用自定义控件对话框将其增加到工程中去时,工具箱将被扩展。在以前ActiveX控件被称作 OLE 控件。ActiveX 控件还使 Internet 更加生动,为 World Wide Web 页增加了有趣的新功能。

    三.ActiveX组件的分类

      ActiveX组件可以分为三类:

      ● ActiveX控件
      ● ActiveX文档
      ● 代码成分(OLE自动服务器)

      (1)ActiveX控件
      可以从无到有被用户完全建立,它能被建立在另一个控件之上,或者它可容纳多个已经有的控件。比如 VB中的ActiveX控件就是建立在VB的用户控件对象上的。当创建一个ActiveX控件时,就创建了一个带有扩展名为 .ctl 的控件类文件。我们通常使用这种文件来创建实际的控件,其扩展名为 .ocx 。
      (2)ActiveX文档
      通常,在具体的编程环境如VB 、VC++中,可以用传统文档的语义学来创建完全的应用程序。换句话说,它不仅有应用程序的功能,而且还有文档性能的灵活性 ─ 当用户打开一个 ActiveX文档时,将不仅拥有应用程序的全部功能,而且能保持和发布应用程序原有数据的“备份”,因而,“文档”实际上是主动的。比如, VB的ActiveX文档是建立在VB用户文档的基础上的。创建一个ActiveX文档时,用带有扩展名 .dob 的文件保存。VB使用这种DOB文件来创建EXE或DLL文件,这种EXE或DLL文件可以为ActiveX文挡提供实际的代码。另外VB生成一个带扩展名 .vbd 的说明文件,它对ActiveX文档进行描述,用主应用程序可以打开这个文件。对于ActiveX文档,可以让用户保存数据,这些数据被存在VBD文件里。
      (3)代码成分
      以前被称作OLE自动服务器。这些对象可以让用户在其他程序里使用其代码。比如,有一个陈列在代码成分里的时钟例程,这样以来此例程可以被其他程序使用。代码成分(ActiveX EXE, ActiveX DLL)能够支持属性与方法。

    四.建立ActiveX组件的选择

      ActiveX组件的各个内容,它们的应用是不同的。那么如何进行选择,以来确定究竟该创建那种组件呢?
      首先,在这里我们务必弄清楚ActiveX组件的运行方式,并知道相应的特点。一般来说,ActiveX组件有两种运行方式:它们是进程外服务器运行和进程内服务器运行。
      如果把一个ActiveX组件作为一个可执行文件(EXE文件)的一部分,那么它就是一个进程外服务器并在自己的进程内运行。若把它作为一个动态链接库(DLL文件)的一部分,则它是一个进程内服务器并作为客户应用程序在统一进程里运行。若用户的ActiveX组件是一个进程外服务器,他就是一个可以单独运行的EXE文件。使用进程内服务器的应用程序通常比使用进程外服务器的应用程序运行速度快,因为应用程序没有通过进程边界去使用对象属性,方法与事件。
      如果将建立的ActiveX文档作为一个进程内组件(DLL文件),进程内组件的性能超过同样编译成EXE的组件。另外,如果多个程序访问同一个EXE文件,将会覆盖全局数据;如果他们都有自己的进程内服务器,这种事情不会发生。
      客户应用程序和内进程组件共享相同的内存空间,所以在调试内进程代码部件的方法时,可以用客户应用程序的堆栈输参数。而对于外进程组件来说,在调试代码部件的过程中,方法的参数必须被移动来通过两个进程间的内存界线,这被称为marshaling。
      这样,我们可以得出如下关于如何选择所创建组件类型的结论:
      (1)若想建立一个在可调用的代码中提供例程的不可视组件,可以建立一个代码组件(ActiveX EXE 或AtiveX DLL).
      (2)若想建立一个能在同一个进程中与应用程序运行的组件, 可以建立一个AtiveX DLL.
      (3)若想建立一个能服务多个应用程序又能在一台远程计算机上运行的组件,可以建立一个AtiveX EXE。
      (4)若想建立一个可视组件,并在设计时能被拖动到一个应用程序中,可建立一个AtiveX 控件。
      (5)若想建立一个可视组件,并在运行时能接受一个应用程序窗口,可建立一个ActiveX 文档。
      至于创建组件之后,如何编程,如何被使用,可以参照有关编程方面的书籍。在这里,我们假设ActiveX组件的设计已经完成,然后对ActiveX组件的注册进行较为详细的讨论。
    ActiveX 是一种用户界面组件(如按钮,列表框等),具有客户端可以操纵的方法、属性和时间,是COM(Component Object Model组件对象模型)服务器的一类。

    COM(Components Object Model)是软件组件互相通讯的一种方式。它是一种二进制和网络标准,允许任意两个组件互相通讯,而不管它们是在什么计算机上运行(只要计算机是相连的),不管各计算机运行的是什么操作系统(只要该操作系统支持 COM),也不管该组件是用什么语言编写的。COM 还提供了位置透明性:在编写组件时,其他组件是进程内 DLL、本地 EXE 还是位于其他计算机上的组件,都不会产生太大影响。
    COM分为以下三类:
    简单服务器:客户应用程序只可调用该服务器,但无法访问其自定义的属性和方法。

    自动服务器:服务器允许调用对象的某些方法和属性,可以用这些方法操纵对象,编写自动服务器的程序员可以决定客户端需要调用那些属性和方法,且只公开这些属性。

    ActiveX:微软对可由客户端已编程方式调用的组件命名,虽然自动服务器对象可以使用公开的方法和属性进行操纵,但不能编写要在对象中发生某个是事件时执行的代码。
    例如我们使用自动服务器创建一个按钮,但是无法编写单击这个按钮时将执行的代码。这时候就要用到ActiveX。


    ActiveX可置入应用程序(如IE)中,能在网页中提供一些特殊功能,但恶意的ActiveX代码可通过web浏览器对系统造成破坏,所以TX提供了ActiveX屏蔽的功能,屏蔽他能保护系统不被这些恶意ActiveX代码破坏,但有些基于ActiveX的服务,也将享受不到了。现在的大多数杀毒软件(如金山毒霸)可以防止这些恶意ActiveX代码不被运行
  • 相关阅读:
    Python_报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence
    Python_报错:TypeError: file must have 'read' and 'readline' attributes
    Maven不扫描java文件夹下的配置文件解决办法
    Web中的相对路径和绝对路径
    sqlyog报错2058
    base标签的作用
    相对路径和绝对路径的解释
    自定义Tomcat部署目录
    常用正则表达式
    接口的结构定义
  • 原文地址:https://www.cnblogs.com/QDuck/p/664781.html
Copyright © 2011-2022 走看看