一、ActiveX基础

1.1什么是ActiveX

ActiveXCOM规范的一种实现,前身是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++DelphiC#VB等语言调用。应用举例:

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

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

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

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

1.3ActiveX分类

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

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

二、ActiveX开发工具

2.1选择适合的开发工具

开发ActiveX的工具一般都是Microsoft提供的,因为ActiveX也是Microsoft提出的嘛,一般有Visual C++ Visual BasicVisual J++Visual FoxProOffice系统产品等都能生成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的支持程序比ALTBaseC

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

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

2.2注册表与ActiveX

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

2.2.1注册表发展史

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

统一记录于Win.iniSystem.ini

记录在自己的ini文件中

记录在注册表中

2.2.2注册表结构

Windows注册表一般分为六大根键:KEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSHKEY_CURRENT_CONFIGKEY_CLASSES_ROOTHKEY

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

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

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

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

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

HKEY_LOCAL_MACHINE:计算机硬件等信息。

三、ActiveX基础----COM

3.1什么是COM

COM是种规范,叫组件对象模型,以组件为发布单元的对象模型,规范提供了统一的方式进行交互,不依赖于任何语文,也是不同语文之类协作开发的一种标准。

COM的主要思想是把一个大项目切成N小块,每个小块可以由不同的团队,不语言开发只要各个模块遵循COM规范就可协同工作。这样灵活化、升级方便、问题快速定位开发自由化。

有关COM的知识参看《Visual C++实践与提高-COMCOM+篇》。

四、使用MFC开发ActiveX

4.1ActiveX基本概念

ActiveX是进程内服务器实现,不能像COM一样实行进程外。ActiveX容器一般指给ActiveX控件提供支持,还可能通过ActiveX的属性方法对ActiveX进行控制,同时还可以响应ActiveX的事件消息。ActiveX控件使用事件来通知ActiveX容器有关ActiveX控件的发生的事情。常用的事件有鼠标消息,键盘消息等。

4.2属性

属性可分为公共属性与自定义属性,公共属性是指ActiveX默认的一些属性,如Caption、背景色、字体等。自定义属性是个性定义属性。

属性一般有三种实现,如下图:

第一个实现方法针对公共属性的,加此属性后,如加一个Caption属性后,选择Stock,在发行的ActiveX控件中会有GetCaptionSetCaption两个方法,而且方法的实现默认实现,但是没有具体的属性,如m_Catption之类的变量。

第二个实现方法对公共属性与自定义属性都可用,有具体的属性变量可明码调用,在发行的ActiveX控件中也将有GetSet方法,且默认实现,同时在ActiveX控件中还有一个函数,当相应的属性改变时,这个函数将被调用。如下图,当m_backColor被改变时,OnBackColorChanged将被调用:

第三个实现方法,不会有具体的属性(变量),也不会有默认现实代码,只是会增加两个方法(SetGet),这两个方法专门操纵某发生用而已,Set带一参数用来设置某属性,Get不带参,返回某一属性。

4.2.1Stock实现属性

些属性是针对公共属性的,自定义属性没有。公共属性一般会有CaptionColorFont等,以Font为例,选择Stock,如图:

发行的ActiveX控件中将会有GetFontSetFont两个方法,ActiveX控件本身不会有GetFontSetFont两个方法,都是默认实现,也不会有Font的具体属性。但是Font将默认生效。

4.2.2通知特性属性

以公共属性Font为例,当m_font属性被改变(可通过SetFont改变,也可直接对其进行修改)OnFontChanged将被调用:

再以自定义属性m_nCount属性为例,在External name输入属性名,在Type框中选择属性数据类型,如下:

ActiveX控件中将默认实现GetSet方法,如GetnCountSetnCount,而且m_nCount属性改变时,OnNCountChanged将被调用,可在OnNCountChanged中实现自己的操作。

对属性初始化:对增加的属性可初始化,在控件类的实现文件的DoPropExchange方法中加上初始化代码,如下:

PX_是固定格式,_后面是数据类型,因为m_nCountlong型,所以是PX_Long,如果nCountshort型则是PX_Short,第一个参数pPX是固定格式,第二个参数是属性名一般是把属性前面的”m_”去掉后即是,第三个为属性本身,第四个为给属性武的初始值。

4.2.3Get/Set类型属性

此类型属性其他是取/设相应属性的方法而已,且通过向导只会加两个方法具体实现代码得自己写,如果没不写具体实现代码,对ActiveX将无任何影响。至少有一个参数,如果想加其他参数,可在参数列表中加:

ActiveX代码中将增加GetBFlagSetBFlag方法,实现代码得自己写;Type中必须先一个参数类型,在Paramete list列表中可增加其他参数。

4.3方法

ActiveX的方法是向外公开的接口,通过方法结合属性可很好的与ActiveX控件通信,当时还可能过触发事件的方式来通信,如下:

此方法是返回一串字符串,参数是字符指针,返回值是long型,实现代码自己实现,在发行的ActiveX控件中将能访问到此接口。参数列表中能添加各种类型的参数。

4.4事件

事件分公共事件与自定义事件,是ActiveX主动向ActiveX容器发出通知的一种机制。

4.4.1自定义事件

通过类向导增加事件,输入事件名:

External name中输入名字,这个是外用名,就是AxctiveX发行后,使用者能看到的名字,Internal nameActiveX内部使用的名字,一般在外用名前加Fire,下面是参数列表,自行配置即可。

自定义事件的触发:ActiveX内部相应的地方调用FireUpInfoActiveX的包容器中将会收到此事件,自动调用相应的事件,以达到ActiveX主动通知ActiveX包容器的目的。

4.4.2公共事件

一般都是鼠标事件与键盘输入事件,默认增加即可,增加后,在ActveX包容器中就能接收到相应的事件,如鼠标按下、弹起、移动等消息。

4.5页面属性及其他

本人一般不关心界面开发,所以页面属性及其他属性不深入研究。

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

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

交流QQ:1148824289

ActiveX开发详解相关推荐

  1. VB6.0 ActiveX 控件开发详解 [第一章:创建工程]

    前言 在CSDN的VB论坛上,我总是能够看见有人这样问"有没有这样的控件,一个列表框,每一个项前面有一个按钮"(这是例子),又或者见到这样:"怎么样做一个ActiveX控 ...

  2. 【OpenCV 4开发详解】分割图像——分水岭法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  3. 【OpenCV 4开发详解】QR二维码检测

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  4. 【OpenCV 4开发详解】深度神经网络应用实例

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  5. 【OpenCV 4开发详解】图像修复

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  6. 【OpenCV 4开发详解】分割图像——Mean-Shift分割算法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  7. 【OpenCV 4开发详解】分割图像——Grabcut图像分割

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  8. 【OpenCV 4开发详解】漫水填充法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. 【OpenCV 4开发详解】点集拟合

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  10. 【OpenCV 4开发详解】轮廓外接多边形

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

最新文章

  1. Linux 下 进程运行时内部函数耗时的统计 工具:pstack,strace,perf trace,systemtap
  2. namespace nvinfer1
  3. 03-Arm SiP Services
  4. VTK:颜色顶点查找表用法实战
  5. ViewGroup.LayoutParams
  6. 【渝粤教育】电大中专药事管理与法规 (2)作业 题库
  7. 【算法学习笔记】85.破环为链 序列DP 松弛+代价 SJTU OJ 1073 能量项链
  8. zxing 如何识别反转二维码
  9. PHP学习记录(数学函数库)
  10. windows 域的安装方法
  11. 如何安装64位Windows7
  12. 邻接矩阵(图的存储)
  13. 抖音直播电商带货项目商业运营计划书短视频创业规划方案
  14. Polar Si9000如何选择模型计算射频线宽?
  15. FoxitReader3.0注册码和foxit pdf creator key foxit pdf editor v2.0 key
  16. 将数字转为中文金额的大写方式(C++版)
  17. DCDC布局布线总结
  18. 计算机控制系统编程语言有哪些,PLC编程语言有哪些种类
  19. 广州找工作指南:避雷公司名录及优秀公司名录
  20. DOM 详细 一篇就够【重点】

热门文章

  1. 教师办公用计算机使用管理制度,教师办公室计算机使用规章制度
  2. Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能
  3. 易灵思FPGA烧写EFINIX 芯片下载使用步骤
  4. 好软推荐之FeedDemon
  5. Deep Gait Recognition: A Survey 阅读笔记
  6. 用Photoshop制作印章
  7. uniapp 自定义头部 支持微信、百度、头条小程序
  8. ROS中launch文件和参数设置
  9. Chrome 各版本下载地址大全
  10. Spark整理:相关名词解释