`
chinamming
  • 浏览: 139107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ActiveX开发详解

阅读更多
配套源码:http://download.csdn.net/detail/mingojiang/4743623

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

一、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

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:计算机硬件等信息。

三、ActiveX基础----COM

3.1什么是COM

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

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

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

四、使用MFC开发ActiveX

4.1ActiveX基本概念

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

4.2属性

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

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

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

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

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

4.2.1Stock实现属性

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

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

4.2.2通知特性属性

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

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

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

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

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

4.2.3Get/Set类型属性

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

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

4.3方法

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

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

4.4事件

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

4.4.1自定义事件

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

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

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

4.4.2公共事件

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

4.5页面属性及其他

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

分享到:
评论

相关推荐

    [001]VC++编写ActiveX控件详解.zip上位机开发VC串口学习资料源码下载

    [001]VC++编写ActiveX控件详解.zip上位机开发VC串口学习资料源码下载[001]VC++编写ActiveX控件详解.zip上位机开发VC串口学习资料源码下载[001]VC++编写ActiveX控件详解.zip上位机开发VC串口学习资料源码下载[001]...

    ActiveX开发代码

    ActiveX控件开发详解配套示例代码, 对ActiveX控件开发的详细实现代码 ...关于ActiveX开发技术的原理与实现在本人博客《ActiveX开发详解》一文中有详尽阐述,博文链接:http://blog.csdn.net/MingoJiang

    精彩编程与编程技巧-利用vb6开发ActiveX控件...

    精彩编程与编程技巧-利用vb6开发ActiveX控件 ...

    学用 Visual C++6.0 开发 ActiveX 控件

    本书是作者在计算机上工作了大量的时间,访问了大量的在线资源,分析研究了ActiveX的 模型库的基础上总结完成的。内容包括 COM 入门;ATL 入门;MFC 入门;在 ATL 中创建 Internet Explorer(Lite)ActiveX控件;在...

    ActiveX制作与测试实例

    这是参考孙鑫老师的深入详解>>中第18章开发的ActiveX开发的,还带了一个测试用的MFC对话框程序,代码中包含详细的注释。而且解决了孙老师在第18章总结处提到的问题。 看代码前,请大家一定不要错过Readme.txt,一定...

    Visual Basic Active X编程实例详解.part2

    这是第二卷 Visual Basic Active X编程实例详解.part2 本书通过大量的精选...本书的内容翔实,结构合理,实例丰富,是学习VB ActiveX编程的难得好书,适合于利用Visual Basic编写AcitveX程序的软件开发人员阅读参考

    Visual Basic Active X编程实例详解

    本书的内容翔实,结构合理,实例丰富,是学习VB ActiveX编程的难得好书,适合于利用Visual Basic编写AcitveX程序的软件开发人员阅读参考 为两卷压缩 Visual Basic Active X编程实例详解.part1 与Visual Basic ...

    Visual Basic Active X 编程实例详解

    编程实例详解>电子书 本书通过大量的精选实例,全面、系统地介绍了使用...本书的内容翔实,结构合理,实例丰富,是学习VB ActiveX编程的难得好书,适合于利用Visual Basic编写AcitveX程序的软件开发人员阅读参考。

    VC++深入详解.pdf

     《VC++深入详解》从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。  《VC++...

    VC++深入详解(课件+源码)

     《VC++深入详解》从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。  《VC++...

    VC++深入详解 PDF教程及示例代码.rar

    《VC++深入详解》是电子工业出版社出版的书籍,作者是孙鑫、余安萍。本书主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习VC++编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解...

    VC++深入详解 扫描版带书签 分卷1

    《VC++深入详解》主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习VC++编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解和掌握Windows的程序设计。另外,全书还贯穿作者多年来...

    VC++深入详解 扫描版带书签 分卷2

    《VC++深入详解》主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习VC++编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解和掌握Windows的程序设计。另外,全书还贯穿作者多年来...

    Delphi6分布式开发

    9.5 delphi 6开发基本多层分布式系统详解 9.5.1 简单应用服务器程序的具体设置 9.5.2 简单客户端程序的具体设置 第10章 midas的高级应用开发 10.1 在 delphi 6开发 midas三层应用程序 10.1.1 在 ...

    TeeChar应用技术详解

    TeeChart Pro 是一个图表控件 本产品的结构和特征功能集是通过与客户多年的交互式开发建立起来的,所以说本产品是一个强大的图表控件,能够给您提供极其高效、直观、节省时间的编程结口。TeeChart Pro ActiveX控件...

    ASP技术详解

    应用ASP技术,无须复杂的编程,就可以开发出专业的动态web站点。ASP的出现,给以静态内容为主的web带来了全新的动态效果。使你的站点具有更加灵活和方便的交互性,在Internet中实现信息的传递和检索越来越容易。

    VirsualC++高级编程技术与实例详解(code)

    第1章 注册表; 第2章 ActiveX控件的使用; 第3章 动态链接库; 第4章 数据库高级编程技术; 第5章 多线程编程; 第6章 WinSock网络编程技术; 第7章 多媒体编程;...第9章 ActiveX控件的开发; 第10章 COM+技术;

    Delphi ocx,dll实现详解

    详细介绍了关于Delphi开发ocx,dll的步骤,讲解很详细都有截图,可以当作入门文档使用,主要讲解的是常用功能,很少使用的或者犄角旮旯的功能都没有总结,像内存映射之类的没有实际的应用场景,如果需要用到了,说明...

    《VC++深入讲解》扫描高清版

    、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。 本书内容丰富、实用性强,许多代码可以直接应用到工程...

    Visual_C++精彩实例详解

    第36章 Windows XP风格之Windows XP风格按钮和滚动条ActiveX控件 第37章 动态链接库(DLL)实例 第38章 文件查找 第39章 只运行一个实例的程序 第40章 使用键盘钩子实现按键发音程序 第41章 密码探测器 第42章 多...

Global site tag (gtag.js) - Google Analytics