ATL

(1)ATL如何使用模板类


 1 #include <iostream>
2 using namespace std;
3
4 class CBase
5 {
6 public:
7 CBase(){}
8 ~CBase(){}
9
10 void BaseMethod()
11 {
12 cout << "BaseMethod in Base" << endl;
13 }
14 };
15
16 class CDerived : public CBase
17 {
18 public:
19 CDerived() {}
20 ~CDerived() {}
21 };
22
23 template<class T>
24 class CComObject : public T
25 {
26 public:
27 CComObject() {}
28 ~CComObject() {}
29
30 void CallBaseMethod()
31 {
32 T * pT = static_cast<T*>(this);
33 pT->BaseMethod();
34 }
35 };
36
37 int main()
38 {
39 CComObject<CDerived> * pDerived = new CComObject<CDerived>;
40 pDerived->CallBaseMethod();
41 delete pDerived;
42 }

为了更加快速和高效,ATL尽量避免使用虚函数,因为在大的类层次中,调用虚函数的代价比较高(运行速度和代码增长)

ATL,布布扣,bubuko.com

时间: 2024-10-10 12:28:14

ATL的相关文章

STL,ATL,WTL之间的联系和区别

一.STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于

COM组件(ATL篇)

目录 第1章创建进程内组件    1 1.1 目标    1 1.2 创建项目    3 1.2.1 VC++6.0    3 1.2.2 VC++2010    5 1.3 增加COM类    6 1.3.1 VC++6.0    6 1.3.2 VC++2010    8 1.3.3 项目结构    12 1.4 增加方法    13 1.4.1 VC++6.0    13 1.4.2 VC++2010    14 1.5 增加属性    16 1.5.1 VC++6.0    16 1.5

ActiveX控件(ATL篇)

目录 第1章 VC++6.0创建    2 1.1 目标    2 1.2 创建项目    2 1.3 增加COM类    4 1.4 属性    7 1.5 事件    8 1.6 实现连接点    9 1.7 编码    11 1.7.1 增加成员变量    11 1.7.2 初始化成员变量    11 1.7.3 完成属性赋值代码    11 1.7.4 完成控件绘制代码    11 1.7.5 响应鼠标左键按下消息    13 1.7.6 修改DllUnregisterServer   

【转载】COM 组件设计与应用(五)——用 ATL 写第一个组件

原文:http://vckbase.com/index.php/wv/1215.html 一.前言 1.如果你在使用 vc5.0 及以前的版本,请你升级为 vc6.0 或 vc.net 2003: 2.如果你在使用 vc6.0 (ATL 3.0)请阅读本回内容: 3.如果你在使用 vc.net(ATL 7.0)请阅读下回内容:(当然读读本文内容也不错) 4.这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成

【转载】COM 组件设计与应用(六)——用 ATL 写第一个组件

原文:http://vckbase.com/index.php/wv/1216.html 一.前言 1.与 <COM 组件设计与应用(五)>的内容基本一致.但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对. 2.这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接. 3.下面......好好听讲! 开

ATL CAxWindow类创建问题一则

查看一个浏览器源码实现,发现其中使用了ie的控件,但例子中没有找到任何创建ie浏览器控件的代码,经过仔细跟踪,发现CAxWindow类是可以这么使用滴.. 创建的时候第三个参数直接传入url.调用到CWindowImpl::Create 多次跟踪后发现疑点: 跟踪到这个函数,查看定义,可以看到如下实现,/(ㄒoㄒ)/~~ 也就是说传入得窗口名中如果包含":"就认为是一个URL,并创建WebBrowser控件. 对于这种实现我只能说也是醉了. ? References: Web Appl

ATL常见错误处理

1.VS2008中ATL项目 “对象不支持此属性和方法”问题 参考地址:http://blog.sina.com.cn/s/blog_4dfc39d10100slhx.html

JavaScript与ATL COM返回值问题

最近做了一个基于ATL的控件,设计了一个接口,想返回多个参数,但是通过JavaScript却无法得到返回值,本来以为是自己接口的问题,后来在网上找了很多才发现原来MSDN已经有了明确的说法: JavaScript does not support passing parameters by reference. JavaScript will make copies of these variables and pass them by value when calling methods th

ATL创建COM步骤

1 新建ATL工程,默认选项:动态链接库(DLL) 2 右键单击工程添加一个新的类,ATL-> ATL简单对象 默认下一步完成. 能够看到类视图中出现了刚刚建立的接口. 3 右键单击接口->添加方法 填写方法名和参数属性,下一步完成.注意out必须为指针类型如 int* 是否选择retval 会对返回类型产生影响. 4 在工程中找到这个类 编写方法内容 编译后会自动进行注册. ATL创建COM步骤,布布扣,bubuko.com

【转载】ATL问题集

原文:http://blog.csdn.net/fengrx/article/details/4171629 这些问题是以前在csdn当版主是一些朋友整理的,今天找到了,贴到这里来! #1 如何使用控件不能改变大小? 答:有时我们需要创建不可改变大小的控件,像那种在运行时没有界面的控件(例:时间控件,SysInfo 等),想做到这种功能的话,请把以下代码加入到控件类的构造函数: m_bAutoSize = TRUE; SIZEL size = {24, 24}; AtlPixelToHiMetr