大家好,最近开始学习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
分享到:
相关推荐
以下是一步步创建一个简单的C# ActiveX控件的步骤: 1. **创建WinForm控件项目**: 首先,我们需要创建一个WinForm用户控件(UserControl)项目,这将作为ActiveX控件的基础。在本例中,项目名为"HelloWorld",...
### ATL中开发复合控件 #### 一、创建工程框架 在本节中,我们将详细介绍如何使用ATL COM AppWizard向导来创建一个复合控件的工程框架。 **1.1 创建工程框架** 首先,我们需要在Visual C++ 6.0环境中启动ATL ...
第30章 ATL和ActiveX控件 第31章 MiCrOSOft ODBC数据库管理 第32章 Microsoft DAO的数据库管理 第33章 OLE DB模板 第34章 TCP/IP,winsook和winInet 第六部分 Interact编程 第35章 Microsoft Intornet...
目录 前言 第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控件
使用MFC,开发者可以通过面向对象的方式编写程序,比如通过MFC AppWizard创建一个简单的"Hello World"程序。MFC应用程序框架包括单文档、多文档以及对话框应用程序,还可以选择是否支持文档/视图结构、数据库支持...
然后,将引导读者创建第一个“Hello, World!”程序,这是每个程序员的起点。 【源程序学习】 教程中的源程序部分是实践操作的关键,通过实际编写和运行代码,可以加深对理论知识的理解。在这一章中,你可能将接触...
请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务, 例如, TS要同时向CP, NP提供服务, CP要向NP和其他CP提供服务, 同时还是其他CP, TS, SP的客户. 3) 每个服务器为客户服务时, 通常是长期的, 会...
书中的实例可能涵盖从简单的“Hello, World”程序到复杂的多文档界面(MDI)应用程序,覆盖了文件操作、对话框设计、菜单和工具栏创建、控件使用、ActiveX组件集成等多个方面。 对于数据库编程,MFC提供了ODBC(Open ...
文档内容包括了从安装Visual Studio 2010到编写第一个“Hello, World!”程序,再到深入了解Visual Studio 2010的新特性。文档详细地介绍了C++工程及其构建系统、Visual C++库的新特点、集成开发环境(IDE)的新增...
1. **基本应用模板**:例如,简单的“Hello, World!”程序,展示了如何使用MFC启动一个应用程序。 2. **文档/视图实现**:包括如何创建和管理文档类、视图类和框架窗口类,以及如何在它们之间传递数据。 3. **控件...
使用Visual C++ 2005创建的第一个Windows程序通常是一个简单的“Hello, World!”程序,它展示了如何使用Windows API创建窗口并显示文本。 2. **查看系统库函数的帮助说明** Visual Studio 2005内建了丰富的帮助...
简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...
简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...
简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...
简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...
- **编写第一个程序(Hello World)**: 此部分提供了编写并运行第一个C++程序的具体步骤, 是初学者快速入门的理想起点。 **四、深入探索** - **Visual C++工程及其构建系统**: - **MSBuild**: 介绍MSBuild工具, 一...
简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密...
- **ATL 控件向导** 和 **MFC 类向导** 为创建 ActiveX 控件和 MFC 应用提供了方便的界面,简化了开发流程。 - **MFC库** 以及 **新的ATL宏** 等更新增强了库的功能,使得开发者可以更加高效地利用这些资源。 #### ...
除此之外,本书还可能涵盖一些高级主题,如ActiveX控件的开发,这在90年代末和2000年初的Windows编程中非常流行。ActiveX技术允许开发者创建可以在不同应用程序间共享的小型组件,这在Web应用和嵌入式系统中尤为常见...
例如,他可能会介绍如何创建一个简单的“Hello, World”程序,如何使用MFC的文档/视图架构实现数据存储和显示,以及如何处理各种Windows消息。此外,他还可能会讨论MFC的高级特性,如多线程编程、ActiveX控件的使用...