`

基于ATL开发ActiveX控件(第一节,简单的Hello world)

阅读更多

      大家好,最近开始学习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
分享到:
评论
3 楼 javatozhang 2016-11-25  
控件支持其他浏览器吗?
2 楼 wmlJava 2011-08-23  
cnpopcorn 写道
写的很好啊,就是过了这么久了没发现第二章,第二章什么时候出来啊,我等着看呢.

写的很肤浅,谢谢支持,因为公司招了一个专门做C++的,我是做Java出身,所以后来就没继续研究这块,不忙的时候我会继续学习控件技术的,到时候有心得一起分享。
1 楼 cnpopcorn 2011-08-15  
写的很好啊,就是过了这么久了没发现第二章,第二章什么时候出来啊,我等着看呢.

相关推荐

    C#编写activex控件

    以下是一步步创建一个简单的C# ActiveX控件的步骤: 1. **创建WinForm控件项目**: 首先,我们需要创建一个WinForm用户控件(UserControl)项目,这将作为ActiveX控件的基础。在本例中,项目名为"HelloWorld",...

    ATL中开发复合控件

    ### ATL中开发复合控件 #### 一、创建工程框架 在本节中,我们将详细介绍如何使用ATL COM AppWizard向导来创建一个复合控件的工程框架。 **1.1 创建工程框架** 首先,我们需要在Visual C++ 6.0环境中启动ATL ...

    visual c++6.0技术内幕 带有NLC的文件查看器

     第30章 ATL和ActiveX控件  第31章 MiCrOSOft ODBC数据库管理  第32章 Microsoft DAO的数据库管理  第33章 OLE DB模板  第34章 TCP/IP,winsook和winInet 第六部分 Interact编程  第35章 Microsoft Intornet...

    VC++开发手机软件(PDF+源码).

    目录 前言 第1章 Windows CE及开发环境概述 1.1 Windows CE概述 1.1.1 Windows CE嵌入式系统概述 1.1.2 Windows CE版本 1.1.3 Windows CE 6.0概述 ...15.4.2 使用MFC向导创建一个简单的ActiveX控件

    window系统开发资料

    使用MFC,开发者可以通过面向对象的方式编写程序,比如通过MFC AppWizard创建一个简单的"Hello World"程序。MFC应用程序框架包括单文档、多文档以及对话框应用程序,还可以选择是否支持文档/视图结构、数据库支持...

    从零开始学VC系列教程_第一章

    然后,将引导读者创建第一个“Hello, World!”程序,这是每个程序员的起点。 【源程序学习】 教程中的源程序部分是实践操作的关键,通过实际编写和运行代码,可以加深对理论知识的理解。在这一章中,你可能将接触...

    vc++ 开发实例源码包

    请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务, 例如, TS要同时向CP, NP提供服务, CP要向NP和其他CP提供服务, 同时还是其他CP, TS, SP的客户. 3) 每个服务器为客户服务时, 通常是长期的, 会...

    深入浅出MFC 第二版

    书中的实例可能涵盖从简单的“Hello, World”程序到复杂的多文档界面(MDI)应用程序,覆盖了文件操作、对话框设计、菜单和工具栏创建、控件使用、ActiveX组件集成等多个方面。 对于数据库编程,MFC提供了ODBC(Open ...

    Microsoft_Visual_Studio_2010初级教程.pdf

    文档内容包括了从安装Visual Studio 2010到编写第一个“Hello, World!”程序,再到深入了解Visual Studio 2010的新特性。文档详细地介绍了C++工程及其构建系统、Visual C++库的新特点、集成开发环境(IDE)的新增...

    这是MFC的课件和一些程序的源代码

    1. **基本应用模板**:例如,简单的“Hello, World!”程序,展示了如何使用MFC启动一个应用程序。 2. **文档/视图实现**:包括如何创建和管理文档类、视图类和框架窗口类,以及如何在它们之间传递数据。 3. **控件...

    Visual C++ 2005教程_VS2005环境

    使用Visual C++ 2005创建的第一个Windows程序通常是一个简单的“Hello, World!”程序,它展示了如何使用Windows API创建窗口并显示文本。 2. **查看系统库函数的帮助说明** Visual Studio 2005内建了丰富的帮助...

    vc++ 应用源码包_1

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    vc++ 应用源码包_2

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    vc++ 应用源码包_3

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    vc++ 应用源码包_6

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    最全VS2010初级教程学习手册

    - **编写第一个程序(Hello World)**: 此部分提供了编写并运行第一个C++程序的具体步骤, 是初学者快速入门的理想起点。 **四、深入探索** - **Visual C++工程及其构建系统**: - **MSBuild**: 介绍MSBuild工具, 一...

    vc++ 应用源码包_5

    简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...

    Microsoft Visual Studio 2010 初级教程

    - **ATL 控件向导** 和 **MFC 类向导** 为创建 ActiveX 控件和 MFC 应用提供了方便的界面,简化了开发流程。 - **MFC库** 以及 **新的ATL宏** 等更新增强了库的功能,使得开发者可以更加高效地利用这些资源。 #### ...

    VC6编程实例精解PDF

    除此之外,本书还可能涵盖一些高级主题,如ActiveX控件的开发,这在90年代末和2000年初的Windows编程中非常流行。ActiveX技术允许开发者创建可以在不同应用程序间共享的小型组件,这在Web应用和嵌入式系统中尤为常见...

    MFC深入浅出(李久进版本).

    例如,他可能会介绍如何创建一个简单的“Hello, World”程序,如何使用MFC的文档/视图架构实现数据存储和显示,以及如何处理各种Windows消息。此外,他还可能会讨论MFC的高级特性,如多线程编程、ActiveX控件的使用...

Global site tag (gtag.js) - Google Analytics