首页 > 编程知识 正文

怎么安装activex控件,activex控件有什么用

时间:2023-05-05 15:20:16 阅读:168930 作者:1472

1.ActiveX的基本概念

ActiveX控件可以被视为非常小的服务器APP应用程序,并且不能独立运行。 它必须嵌入到容器程序中,并与容器一起运行。 此容器包括网页、APP应用程序表单等。

ActiveX控件的扩展名为OCX或DLL。 通常,以OCX和动态库共存的形式打包到cab或exe文件中并放置在服务器上,然后由客户端下载并运行安装cab或exe,解压缩为OCX和动态库共存的文件,最后将OCX文件

ActiveX控件基于com标准,是一组软件部件在网络环境中进行交互的技术。 那与具体的编程语言无关。 作为为互联网APP应用开发的技术,ActiveX广泛应用于WEB服务器和客户端的各个方面。 ActiveX技术还用于方便地创建典型的桌面APP应用程序,ActiveX一般具有界面。

2.三个概念:ActiveX、OLE和COM

从时间的角度来说,OLE最早出现,然后是COM和ActiveX; 从体系结构的角度来说,OLE和ActiveX是建立在COM之上的,所以COM是基础; 单从名字来说,OLE、ActiveX是两个商标名,COM是纯粹的技术名词,所以也是经常听到ActiveX和OLE的理由。 因为COM是应OLE的需求而产生的,所以COM是OLE的基础,但OLE的产生早于COM。 COM的基本出发点是一个软件通过一个公共机构服务于另一个软件。 ActiveX最核心的技术还是COM。 ActiveX与OLE的最大区别在于,OLE主要用于桌面上的APP应用程序软件和文件之间的集成,而ActiveX主要用于进一步加强网络APP应用程序和用户之间的交互。 COM对象可以用任何语言(如c、Java和VB )编写,并可以以DLL或作为不同进程运行的可执行文件的形式实现。 使用COM对象的浏览器,您无需考虑对象是用哪种语言编写的,也无需考虑对象是在DLL中运行还是在其他进程中运行。 从浏览器方面来看,没有任何区别。 这种常见的处理技术非常有用。

3.ActiveX控件工程的创建

要使用VS2010,可以通过两种方式创建ActiveX项目。

第一个:创建“MFC ActiveX控件”项目;

第二个:创建“ATL项目”。 使用ATL开发ActiveX控件需要了解com技术,对程序员的要求也很高,开发时间也很长,所以如果ActiveX只在windows操作系统上运行,请使用“MFC ActiveX控件” 然而,注意,要使用“MFC ActiveX控件”项目快速构建ActiveX控件,MFC基于微软的c动态库安装包,因此需要注意的是windoox 因此,这两种方式各有优缺点,根据项目需要选择合适的方式。

4.使用VS2010创建MFC ActiveX工程项目步骤

由于很难使用ATL创建ActiveX项目,因此我们首先使用“MFC ActiveX控件”项目创建一个简单的ActiveX控件。

一、选择“新建项目-”“MFC ActiveX控件”项目,将该项目命名为TestMfcAtlDebug,然后单击“确定”打开“控件向导”对话框

其次,在概述中,选择缺省的APP应用设置、控件名称和控件设置,然后单击“完成”以完成MFC ActiveX控件项目的创建

5.分析“MFC ActiveX 控件”工程的三个重要的类以及对外接口定义文件idl

使用向导创建项目时,您将看到系统自动生成了三个类: TestMfcAtlDebug、TestMfcAtlDebugCtrl和TestMfcAtlDebugPropPage

打开上面三个类的头文件和cpp文件,可以看到它们都是派生类。

TestMfcAtlDebug:cpp文件定义了DllRegisterServer和DllUnregisterServer,可以看到注册和取消分组ActiveX与此类有关。

TestMfcAtlDebugCtrl :您可以看到在头文件中声明了消息映射。 ActiveX控件程序可以接收系统发送的事件通知,例如创建表单和关闭事件。 它还安排一个映射,以便外部调用程序(包含ActiveX的容器)可以轻松访问ActiveX控件的属性和方法。 事件映射是ActiveX控件,即ActiveX控件的窗口操作是在此类中进行的,如创建、重绘ActiveX控件和创建可视MFC表单。

显示estmfcatldebugproppage:ActiveX控件的属性页

看看最重要的部分吧。 是对外接口

定义文件TestMfcAtlDebug.idl,代码如下:

#include <olectl.h>#include <idispids.h>[ uuid(69EE37F4-8B36-495F-9F60-5E3AAF2FB494), version(1.0), control ]library TestMfcAtlDebugLib{importlib(STDOLE_TLB);// CTestMfcAtlDebugCtrl 的主调度接口[ uuid(6B60346D-5CCD-4907-83F4-51938558A9B7)]dispinterface _DTestMfcAtlDebug{properties:methods:[id(DISPID_ABOUTBOX)] void AboutBox();};// CTestMfcAtlDebugCtrl 的事件调度接口[ uuid(E26ECC46-9BA2-4C25-A4DD-A690560A5113)]dispinterface _DTestMfcAtlDebugEvents{properties:// 事件接口没有任何属性methods:};// CTestMfcAtlDebugCtrl 的类信息[uuid(DD0CF7EF-A181-428C-B5FC-C44A1C13CA43)]coclass TestMfcAtlDebug{[default] dispinterface _DTestMfcAtlDebug;[default, source] dispinterface _DTestMfcAtlDebugEvents;};};

这个就是对外接口定义文件,如果外部程序想要调用ActiveX的方法,属性以及在注册表注册的classid(WEB网页调用需要使用),就必须了解这个文件,这个文件可以分为四个部分来看:

首先是TestMfcAtlDebug.Lib这个库信息

这个就不做详解

第二部分是调度映射的接口信息,该接口信息包含了属性(如控件背景色)和对外方法

里面定义了一个方法AboutBox(),该方法就可以被外部程序调用,在该接口里定义的函数都是纯虚函数,这些函数的实现都是在TestMfcAtlDebugCtrl中完成的,MFC通过底层的封装,让TestMfcAtlDebugCtrl类继承这个接口,实现函数。

第三部分是事件映射的接口信息

第四部分是类的信息,其中uuid就是ActiveX控件注册到注册表的classid,它是ActiveX注册后在系统内的唯一标识,WEB网页就是使用这个ID加载ActiveX控件的

 

6.定义调度映射和事件映射方法,提供给外部调用者使用
那么怎么定义新的调度映射和事件映射方法呢,如果手动定义很不方便,当然使用编译器进行定义,步骤是打开类视图:

可以看到TestMfcAtlDebugLib中有_DTestMfcAtlDebug和_DTestMfcAtlDebugEvents,在_DTestMfcAtlDebug项中可以右键-》添加方法(或属性),该操作是完成调度映射的方法和属性的添加;在_DTestMfcAtlDebugEvents项中可以右键-》添加方法(或属性),该操作是完成事件映射的方法和属性的添加。

举个例子,如果要添加一个调度映射的方法Fuck2(),使得外部可以调用:

在_DTestMfcAtlDebug项中可以右键-》添加方法,设置框

填写完信息后点击完成,外部就可以调用方法Fuck2,同时ActiveX控件项目代码的内部将会在三个文件中新增代码:

1.在

2.在

3.在

 

7.注册ActiveX控件

按照上面的步骤已经完成简单ActiveX控件(无窗体界面的控件)的编写,重新生成后会在Debug下生成一个TestMfcAtlDebug.ocx的文件,使用windows的dos窗口可以注册这个ActiveX控件

步骤:

首先win+R键打开运行,然后输入注册命令:regsvr32  c:.......TestMfcAtlDebug.ocx(反注册命令:regsvr32  c:.......TestMfcAtlDebug.ocx -u)

有两种情况会导致控件注册失败:

第一种:使用非Administrator用户登入系统会由于权限不足而无法注册com组件,这时候就必须使用Administrator用户登入操作系统

第二种:ActiveX控件所依赖的dll库被程序给占用,就会导致注册失败,解决办法是将正在运行的程序关闭就可以

 

 8.测试ActiveX控件的方法

按照上面的步骤已经完成ActiveX控件的编写,也将这个控件注册成功了,那么怎么测试这个控件呢,有三种方式:

第一种:使用html网页来测试

在TestMfcActiveX.htm的文件中编写代码如下:

<HTML><HEAD><TITLE>Test ActiveX</TITLE></HEAD><OBJECT ID="TestMfcAtl Control" WIDTH=528 HEIGHT=545 classid="CLSID:DD0CF7EF-A181-428C-B5FC-C44A1C13CA43"> <PARAM NAME="_Version" VALUE="65536"> <PARAM NAME="_ExtentX" VALUE="12806"> <PARAM NAME="_ExtentY" VALUE="1747"> <PARAM NAME="_StockProps" VALUE="0"></OBJECT></HTML>

注意上面的classid就是在idl文件中类的uuid,然后打开这个网页就会显示ActiveX控件。上面的classid在控件成功注册后也可以通过注册表查找,具体方法是win+R键,输入regedit命令,就会弹出“注册表编辑器”,位置在“HKET_CLASSES_ROOT”中,根据你控件的名称,快速按下前三个字母,然后就可以定位到比较好找的位置,如下图

第二种:建立Mfc应用程序,在Mfc窗口右键-》插入“ActiveX”控件,然后就会在MFC的窗体上显示ActiveX控件

第三种:也是最方便的一种方法,就是使用vs自带的ActiveX Control Test Container来测试ActiveX控件,但是VS2010在“工具”中没有这一项,那么我们首先可以手动把这个工具添加到VS2010里,首先找到C:Program FilesMicrosoft Visual Studio 10.0Samples2052C++MFColeTstConTstCon.sln,然后使用VS2010打开解决方案TstCon.sln,编译项目TCProps和TstCon,编译完成后会在C:Program FilesMicrosoft Visual Studio 10.0Samples2052C++MFColeTstConDebug中生成TstCon.exe执行程序,这个执行程序就是ActiveX Control Test Container,接下来我们就在VS2010中的工具中添加这个TstCon.exe,在VS2010中的“工具”菜单项中选择“外部工具”,在弹出的窗体中添加一个新的工具,标题为ActiveX Control Test Container,命令为C:Program FilesMicrosoft Visual Studio 10.0Samples2052C++MFColeTstConDebugTstCon.exe,然后点击确定就可以完成工具的添加了。

 

 这样,在“工具”中就有了一个ActiveX Control Test Container,点击它就会弹出测试ActiveX的容器,如下图

点击Edit->Insert New Control->选择TestMfcAtlDebug Control,点击OK

然后就会显示这个注册后的AcitveX控件,如果要测试这个控件的调度映射的方法Fuck2,就先选中控件,然后点击Control-》Invoke Methods,在Methods Name下拉框中选择Fuck2这个方法,点击Invoke按钮就可以测试这个方法了,如下图:

我们可以看到上面的ActiveX控件是一个空白的背景和一个圈组成的,并没有窗体界面,那么怎么添加窗体呢?

 

9.向ActiveX控件中添加一个Mfc窗体,就是一个带界面的ActiveX控件

 步骤:

第一:在资源视图中新建一个对话框资源

去掉上边的“确定”和“取消”按钮,然后修改对话框属性:Border改为None,Control改为Ture,ID改为IDD_MAIN_DIALOG,Style改为Child,System改为False,Visible改为True,然后在对话框中双击,为对话框添加一个类,如下图:

 

点击“完成”。在解决方案资源管理器中新增了一个ViewDialog.h和ViewDialog.cpp这个ViewDialog类就是刚刚我们建立的对话框类

然后拖一个Edit Control到对话框上,修改其ID为IDC_EDIT_OUTPUT,再拖一个Button到对话框上,此时对话框效果为:

 对话框建立完成,接下来就是要把它添加到ActiveX控件中去

 

第二:在TestMfcAtlDebugCtrl.h中定义对话框实例m_VideoDlg

 然后在TestMfcAtlDebugCtrl类中定义两个消息映射:窗体创建完成消息映射和窗体改变大小消息映射

在VS2010的菜单项“项目”--》“类向导”中,选择要添加到的项目和类中,选择“消息”选项卡,选择WM_CREATE后点击”添加处理程序“按钮和选择WM_SIZE

后点击”添加处理程序“,这样在“现有的处理程序”中就有OnCreate和OnSize这两个函数,点击确定,完成消息映射函数的添加,如图:

 在TestMfcAtlDebugCtrl.cpp中自动添加下列代码,如图:

 在OnCreate函数中编写如下代码(Create是在ActiveX控件中创建一个窗体对话框,IDD_VIEW_DIALOG就是刚刚新建的对话框):

 在OnSize函数编写代码如下(MoveWindow是确定窗体对话框在ActiveX中的大小):

 

 第三:重新编译,注册ocx,使用ActiveX Control Test Container再次测试该控件

 可以发现这个ActiveX控件中已经有了界面了

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。