精选文章 ATL学习笔记〔一〕

ATL学习笔记〔一〕

作者:weixin_30872499 时间: 2021-02-07 03:15:53
weixin_30872499 2021-02-07 03:15:53
【摘要】ATL 即活动模板库,是一套基于模板的 C++ 类,使用这些类可以容易地创建小型、快速的组件对象模型 (COM) 对象。它具有对主要 COM  
 功能的特殊支持,包括:IUnknown、IClassFactory、IClassFactory2 和 IDispatch 的常用实现;双重接口;标准 COM 枚举数接口;连 
 接点;分开的接口;ActiveX 控件。 
 [[看来,ATL是用C...

ATL 即活动模板库,是一套基于模板的 C++ 类,使用这些类可以容易地创建小型、快速的组件对象模型 (COM) 对象。它具有对主要 COM

功能的特殊支持,包括:IUnknown、IClassFactory、IClassFactory2 和 IDispatch 的常用实现;双重接口;标准 COM 枚举数接口;连

接点;分开的接口;ActiveX 控件。

[[
看来,ATL是用C++开发COM的一个很好的选择!
]]

ATL 代码可以用来创建单线程对象、单元模型对象、自由线程模型对象或既是自由线程又是单元模型的对象。

模板有一些像宏。与使用宏一样,调用模板将使它展开(伴随适当的参数替换)为已经编写的代码。但是,模板比这更进一步,它允许基于

作为参数传递的类型创建新类。这些新类能够实现以类型安全的方法执行在模板代码中表示的操作。
模板库(如 ATL)与传统的 C++ 类库的区别在于:它们通常只作为源代码(或作为具有少量的提供支持的运行时的源代码)提供,并且在

本质上没有固有的分层结构或没有必要有分层结构。不是从类中派生以得到所需的功能,而是从模板中实例化类。

ATL 使您可以很容易创建 COM 对象、自动化服务器和 ActiveX 控件。ATL 为许多基本的 COM 接口提供内置支持。
ATL 作为在应用程序中包括的源代码提供。ATL 还使一个 DLL (atl71.dll) 可用,该 DLL 包含可以在多个组件之间共享的代码。但是,该

DLL 并非必要。

[[
看过一些讲COM的书上说:COM只是一种规范,而它的表现形式通常是一个DLL!但是并不绝对是DLL!
那还有什么形式呢?
]]


使用 ATL
ATL 对于用 C++ 创建 COM 组件和节省空间都是一种快速简便的方法。如果不需要 MFC 自动提供的所有内置功能,使用 ATL 创建控件。

使用 MFC
MFC 允许创建具有完整功能的应用程序、ActiveX 控件和活动文档。如果已经使用 MFC 创建了控件,可能需要继续使用 MFC 进行开发。

当创建新控件时,如果不需要 MFC 的所有内置功能,可考虑使用 ATL。

[[
呵呵,看来ATL比MFC要好不少了!最起码体积占优势呀!

不过,到这里可以有一些肯定的问题了,ATL:活动模板库、MFC基本类库!都是类库!ATL和MFC是平行的!不要搞出笑话!
]]


活动模板库 (ATL) 是一套基于模板的 C++ 类,用以简化小而快的 COM 对象的编写。


[[
ATL是一套现成的类库,提供给程序员,目的是编写COM对象的!
]]

使用 ATL 项目向导的“应用程序设置”页为新 ATL 项目设计和添加基本功能。

属性化
默认值。创建使用属性的 ATL 项目。选择此选项后,module 属性将插入到项目的 .cpp 文件中。该属性自动实现 DllMain、

DllRegisterServer、DllUnregisterServer、DllGetClassObject 和 DllCanUnloadNow。ATL 项目向导生成两个项目:支持属性的框架

ATL DLL 项目(称为 ProjName)和代理/存根 (stub) 项目(称为 ProjNamePS)。
属性化项目不允许 MFC 支持和合并代理/存根 (stub) 代码。

默认情况下,其他将对象和控件插入项目的 ATL 向导使用属性化代码。


服务器类型
从三种服务器类型中选择一种:

动态链接库 (DLL)
选择以创建进程内服务器。
可执行文件 (EXE)
选择以创建本地进程外服务器。此选项不允许 MFC 或 COM+ 1.0 支持。它不允许合并代理/存根 (stub) 代码。
服务 (EXE)
选择以创建当 Windows 启动时在后台运行的 Windows 应用程序。此选项不允许 MFC 或 COM+ 1.0 支持,也不允许合并代理/存根 (

stub) 代码。
附加选项
注意   所有的附加选项仅适用于 DLL 项目。
允许合并代理/存根(stub)代码
选择“允许合并代理/存根(stub)代码”复选框是为了需要封送处理接口时比较方便。此选项在与服务器相同的 DLL 中放置 MIDL 生成的代理

和存根 (stub) 代码。
支持 MFC
选择以指定对象包含 MFC 支持。此选项将项目链接到 MFC 库,以便可以访问它们包含的任何类和函数。
支持 COM+ 1.0
选择修改项目生成设置以支持 COM+ 1.0 组件。除标准库列表以外,向导还添加了 COM+ 1.0 组件特定库 comsvcs.lib
另外,当启动应用程序时 mtxex.dll 在主系统上延迟加载。

支持组件注册器   如果 ATL 项目包含对 COM+ 1.0 组件的支持,则可以设置此选项。组件注册器使 COM+ 1.0 对象得以获取组件列表、注

册组件或注销组件(个别或同时)。



从MSDN里学习

转载于:https://www.cnblogs.com/dsclub/archive/2004/07/27/27849.html

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:被C#2005 Express 撞了一下腰

下一篇:对象的效率

您可能感兴趣

  • Atl实战系列《用ATL COM Wizard 实现(VC++的插件)Add-in》

    要实现Add-in Object 有三种方法,一种是利用ATL COM Wizard中的ATL对象 Add-in Object来实现,另一种是利用DevStudio Add-in Wizard来实现,第三种就是手工写所有的代码,如果手工写,一定要记住实现IDSAddIn接口,这样才能才能增加新的命令和工具条到VC的IDE环境中去。  我主要是讲解ATL COM Wizard,所以我用第一种方...

  • 一个C++程序员的Delphi学习笔记(2)

    一个C++程序员的Delphi学习笔记(2) 三 VCL    《从入门到精通》,作者的安排可真大胆。不先讲如何在Form上摆控件,倒自VCL讲起。我佩服作者的气魄,直直的深入到问题的核心,剔筋去肉,先将脉络端到你的面前。要知道,这有着失去很多读者的危险。 1.TObject,万类之源。RTTI信息就放在这里了,这算是单根单继承实现上的便利吧。 2.一个细节:TButton.Instance...

  • 不使用ATL向导,创建一个简单的ATL对话框程序.

    本例使用CWindowImpl类创建对话框程序.第一步:建立一个新的Win32 Application工程. 第二步:在stdafx.h中包含下面三行.      #include extern CComModule _Module;#include 第三步:写WinMain函数,如下:      int APIENTRY WinMain( HINSTANCE hInstance, H...

  • ATL实现Connection Point的一种简单的方法

    大家好!前几天刚到一家新公司,我参与的系统中是完全基于COM组件的开发,其中用到了大量的Connection Point方法,被逼无奈,只好抱一抱佛脚了,经过一段时间的学习,总算有了一些体会,来与大家分享一下,各位莫笑。 让我们用示例来说明: COM服务器: 1.新建一个COM对象CA实现IA接口,利用向导来实现这一步。 2.添加IEvent接口的定义,并将它声明为COM对象A的外部接口(O...

  • 《Mastering Delphi6》学习笔记之三

    代码编辑器/窗体设计器/Object Inspector中的一些快捷键 在代码编辑器中按Ctrl+E可以 激活Increment Search。这样就避免了从菜单中选择Search->Find,再输入文本的繁琐步骤。 选中一或者几行文本,然后按Ctrl+Shift+I,可以增加这几行的缩进量;Ctrl+Shift+U减少缩进。缩进的距离取决于Editor Options里面的Auto Ind...

  • 《Mastering Delphi 6》学习笔记之四

    《Mastering Delphi 6》 学习笔记之四 在C++中,我们可以用static来声明一个属于类而不是类的某个具体实例的函数。许多人以为Object Pascal没有类似的功能,其实是有的,只要将函数声明为类方法(class procedure或者class function)就可以了。例如: TForm1=class(TForm) public   class procedure...

  • 《Mastering Delphi 6》学习笔记之五

    《Mastering Delphi 6》 学习笔记之五   在某个类中用protected声明的变量,在本单元之外是不能够随意访问的(通过声明子类才可以访问其protected域)。《Mastering Delphi 6》中提到了一个不常用的技巧: // Unit2 type TTest = class   protected    protectedVar : integer; end; ...

  • 《Mastering Delphi 6》学习笔记之六

    《Mastering Delphi 6》学习笔记之六 Delphi 6中对RTL增加了不少函数和Helper Class,虽然不算翻天覆地的大变化,不过确实方便不少。如果有时间的话,建议大概浏览一下新增的StrUtils,DateUtils和ConvUtils这些单元,相信会发现一些有趣的东西。 如果要得到操作系统的信息,如下即可:   case Win32Platform of    ...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
ATL学习笔记〔一〕介绍:华为云为您免费提供ATL学习笔记〔一〕在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多ATL学习笔记〔一〕的相关内容。| 移动地址: ATL学习笔记〔一〕 | 写博客