大家好,最近开始学习C++,由于工作原因需要维护和完善已有的ActiveX控件,本人对C++还是起步阶段,对开发ActiveX控件更是一无所知,于是把学习控件开发的经历记录下来,以便自己将来的温故和对同样没有学习基础的人一个帮助。有C++开发经验的人可以绕。知识就像一幢大楼,需要一砖一瓦的建设,闲话少叙,开始学习吧......
一、开发环境
XP、Visual Studio2010。
我用VC2010做为C++的集成开发环境,Visual Studio2010也是目前最新版了。选择最新版是有原因的,我先安装了Visual Studio2010用了一段时间,然后在网上找的教学视频都是基于VC6的,还有工作上遇到的一些从事C++开发的牛人用的也是VC6,于是我又下了一个VC6,但是用起来发现VC6和2010的差距好大,而且一个重要的原因是VC6推出的时候C++的标准还没有形成,所以VC6对C++的支持有一些地方并不规范;还有一个原因,WIN7逐渐普及的同时WIN7 64位也在逐渐的走入千家万户,我们单位新配的电脑就是WIN7 64位的系统,在VC6中找不到64为的开发环境,所以VC6迟早要被时代所淘汰,就像经典的XP正在被WIN7淘汰一样。
我的操作系统目前用的是XP,我是在WIN7上运行的虚拟机,虚拟的XP,单位的电脑好快,在虚拟机上开发并不觉得太慢,大家可能有疑问,为什么不在WIN7上开发,我在WIN7上开发的控件在XP上无法注册,不过还没证实就是WIN7原因,现在我们用XP系统开发,试试吧。
二、 开发第一个ActiveX控件
第一步:创建工程
运行Visual Studio2010,我用C++语言开发,我们创建一个工程:“文件--新建--项目”,在已安装的模板中选择“Visual C++——ATL”,然后选择右边的“ATL项目”,项目名称“HeloWorldATL”,点击确定,然后一直下一步选择默认的配置就可以,工程就创建好了。见下图
第二步:添加一个ATL控件类
右键工程名称“HeloWorldATL”,选择“添加--类”,选择“ATL控件”,在简称处填写“Test”,点击完成。
第三步:添加一个方法
切换到类视图(在左下角解决方案旁边),找到ITest接口,右键“添加--方法”,方法名:“test1”,点击完成。
第四步:编写方法代码
切换到解决方案视图,然后展开“源代码”,打开Test.cpp,找到方法:
STDMETHODIMP CTest::test1(void)
{
// TODO: 在此添加实现代码
return S_OK;
}
修改方法,我做了一个简单的实现,将“hello”输出到本地硬盘上:
STDMETHODIMP CTest::test1(void)
{
ofstream out("C:\\log1.txt");
out << "hello";
out.close();
return S_OK;
}
记得引入ofstream:
#include <fstream>
using namespace std;
第五步:编译生成控件
右键项目名称,选择“生成”,输入控制台显示:
生成成功。
已用时间 00:00:24.29
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
此刻我们找控件生成的位置,首先找到工程所在目录,默认是在我的文档下的Visual Studio 2010,然后进入工程文件夹,进入HeloWorldATL\Debug,其中HeloWorldATL.dll就是我们编译后生成的控件。
我的完整路径供大家参考:
C:\Documents and Settings\XPMUser\My Documents\Visual Studio 2010\Projects\HeloWorldATL\Debug
三、测试ActiveX控件
首先介绍一下CLASSID, 大家会有疑问,测试控件和CLASSID有什么关系呢?这和ActiveX控件调用的机制有关,在html文件中,ActiveX控件是通过<object>标签声明并调用的,<object>标签中有三个重要的属性,第一个是id,通过id我们可以用js引入控件对象;第二个是codebase,用来指定控件的安装源,这个我们先不做介绍;第三个就是CLASSID,用来查找注册表中控件,CLASSID又叫全球唯一标识,也就是说我们每次创建的控件工程所产生的CLASSID都不会重复,原理大概是这样的:取网卡的Mac地址然后拼接上一些随机数等规则,因为网卡的Mac地址也是全球唯一的,所以生生的CLASSID也不会重复。那么我们怎么找到控件的CLASSID呢?细心的观察我们可以发现,但我们对工程进行生成操作后,在工程下多了一个htm文件,我的叫Test.html,这个文件的命名规则是取我们控件类的名称,大概这个文件我们看其中关键的内容:
<OBJECT ID="Test" CLASSID="CLSID:D55ED53A-0452-4D3D-B821-23D8B5E984D8"></OBJECT>
没错,我的CLASSID就是“D55ED53A-0452-4D3D-B821-23D8B5E984D8”,这个htm就是用来测试我们的控件的,光有一个<object>标记还不够,我们还要添加一些测试代码,如下:
<script type="text/javascript">
Test.test1();
</script>
然后我们运行一下这个htm,看看最终的效果。
第一节,简单的Hello world!
在本节中只是做了一个最简单的ActiveX控件,并没有涉及到传参和返回值,后续我会讲怎么传参怎么接收返回值,敬请期待!
- 大小: 31 KB
分享到:
相关推荐
VC++ 演示ATL编写ActiveX控件的方法 VC++ 演示ATL编写ActiveX控件的方法
ATL开发的ACTIVEX控件的一个IE控件例子程序,源码。想学IE控件开发的试试看吧。
在MFC中,使用ATL开发ActiveX控件MagicBox的源代码实例,希望对你的编程有所帮助,谢谢!
XBarCodePro ATL ActiveX控件 用于任何支持OLE的语言开发高级条码应用程序,如:VB, VC++,VB.Net,C#.Net, VC++.Net。用户可以直接把该控件嵌入到支持OLE的应用程序,如:Microsoft Word, Access 和 Excel。...
用ATL创建ActiveX控件,电子文档,相互学习
ATL开发ActiveX的步骤MSDN里就有 网上显示gif动画的资料也不少 综合了一下,这只是个毛坯,真正用的时候再完成吧 内容: 一个word文档,描述开发步骤 一个demo,包含组件和测试工程
基于MFC的ActiveX控件开发: 在VC 下ActiveX 控件的开发可以分为三种,一种是直接用COM 的API 来开发, 这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的;一种是基于传统 的MFC,采用面向对象的...
使用MFC与ATL两种工具开发ActiveX控件
向大家介绍atl编写 activex 空间 方法,activeX 采用ATL 编写
在 ATL中创建Full ActiveX控件;ATL对ActiveX控件 的属性页面的支持; ATL中对ActiveX控件事件的支持; 在MFC中创建特殊化的ActiveX控件; 在 MFC 中创建全性能的 ActiveX 控件;MFC 中对 ActiveX 控件的属性页面的...
ATL写的ActiveX密码控件,很有参考价值
visual c++编写ATL ActiveX OCX控件
ATL编写控件比MFC要难一些,所谓的难就是ATL中的编程向导没有MFC中的那么好用。有好多的东东要自己手工去加。所以今天我就把ATL控件建立的过程在此阐述一下,供初学者学习。代码文档...
用ATL开发和部署ActiveX控件的简单例子VB技术很实用的源码自己收藏的源码,特意贡献给大家
一个ATL开发复合控件的例子,又详细的步骤说明。参见压缩包中的“ATL中开发复合控件.doc”文件。
ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中。在VC下ActiveX控件的开发...本文介绍的是采用第二种方式,即应用MFC进行桌面可视控件开发的方法步骤,开发环境则是基于VC2005。
ATL开发ActiveX入门,一步一步实现ATL开发的ActiveX组件与javascript的交互(一)_世界无限大_百度空间.htm
用ATL和MFC来创建ActiveX控件
ActiveX控件的应用与工作原理。ActiveX控件的编写,如何为控件安排属性,方法,事件,属性页,持久性存储,控件如何通知容器自身属性的改变。如何注册控件与取消控件注册。在VB和VC中访问ActiveX控件。