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:计算机硬件等信息。
微软定义
控件
文档
脚本
特点
相关内容
保证安全
相关技术
COM地位
ActiveX 控件的更多相关文章
- 第18讲——ActiveX控件
1,容器应用程序是可以嵌入或链接对象的应用程序.服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序. 2,可以安装一个TstCon32来测试ActiveX控件 3,可以用 Invalid ...
- ActiveX控件之ActiveXObject is not defined
ActiveX控件方便用户在网页中插入各种效果,但是并不是所有浏览器都支持该控件. ActiveX是微软独有的,只有基于IE内核的浏览器才能使用. 当出现如上错误,可以将通过该控件创建的对象定义为本地 ...
- 用C#开发ActiveX控件,并使用web调用
入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己.最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及 ...
- .net下开发ActiveX控件
` ActiveX 是一个开放的集成平台,为开发人员. 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ActiveX, 可 ...
- ActiveX控件打包、签名、嵌入详解
ActiveX控件打包.签名.嵌入详解 前言 在我们的一个项目中,使用到了大华网络监控摄像头枪机,网络上下载了其ActiveX插件,但是发现其所提供的类库没有打包处理.这就导致我们每次给用户安装的时候 ...
- ATL开发 ActiveX控件的 inf文件模板
ATL开发 ActiveX控件的 inf文件模板
- C#ActiveX控件开发学习
一:C#ActiveX控件开发注意事项 1:C#开发的ActiveX控件只可在装有Framework的系统上才能用. 2:只有IE浏览器支持. 3:初次安装需要导入代码签名证书及其证书链的方式, ...
- 使用C#开发ActiveX控件(新)
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...
- C# 在 vs2010 上开发 ActiveX 控件 【千辛万苦啊~】
由于B/S项目中需要使用到读卡器的功能,但是由于厂家只有提供一个 读卡的dll,那么怎样能在客户端使用读卡器呢,那么进过一番查找,最总决定使用ActiveX 控件来做.由于是第一次接触到 Active ...
- 在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗
转自 http://www.cnblogs.com/zdxster/archive/2011/01/27/1945868.html 在EOS6的项目中,如果采用VC++开发的ActiveX,那么第一次 ...
随机推荐
- 关于python中生成器之Send方法
#send主要是用于外部与生成器对象的交互def func1(): # 生成器函数 print("ok1") x = 10 # 函数内局部变量x赋值为10 print(x) x = ...
- sqlserver表结构的修改
表添加新字段 sqlserver alter table 表名 add 新增字段名 新增字段类型 是否允许为空,如: alter table [数据库名].[dbo].[表名称] add [新增字段] ...
- Linux常用操作分享
Java开发经常遇到的linux相关操作 1.常用的上传下载(Xshell5) 1).get 从远程服务器上下载一个文件存放到本地,如下: 先通过lcd切换到本地那个目录下,然后通过get file ...
- 微信小程序开发warning: Now you can provide attr "wx:key" for a "wx:for" to improve performance
用微信官方的模板发现突然报了这个warning,检查原因: 官方解释: wx:key 如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <i ...
- BZOJ2054 疯狂的馒头 并查集
题意:懒得写了有空再补上 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2054 离线从后往前做,并查集维护下一个没染色的就可以啦- #incl ...
- 《C++数据结构-快速拾遗》 基础常识
1.命名空间函数 namespace wjy { void print() { cout<<"; } int load(int num) { return num; } } us ...
- StanFord ML 笔记 第九部分
第九部分: 1.高斯混合模型 2.EM算法的认知 1.高斯混合模型 之前博文已经说明:http://www.cnblogs.com/wjy-lulu/p/7009038.html 2.EM算法的认知 ...
- [UGUI]渲染层级关系
参考链接: http://blog.csdn.net/meegomeego/article/details/42060389 Unity中的渲染顺序自上而下大致可以分为三层: 1.Camera层.可以 ...
- IIS w3wp对应的应用程序
IIS7以前我們用IISApp查看IIS哪些服務已啟動,但在IIS7已經不適用了,新語法是appcmd.exe list wp.你可以在%windir%\system32\inetsrv\底下找到ap ...
- 《算法》第四章部分程序 part 2
▶ 书中第四章部分程序,加上自己补充的代码,随机生成各类无向图 ● 随机生成无向图 package package01; import edu.princeton.cs.algs4.StdOut; i ...