人工精选ATL(四)基础应用篇
这门课解决什么工作场景 这套资料聚焦于 ATL 在实际工程里的两块硬骨头:永久存储与列举器。如果你平时在维护遗留的 COM 组件、给旧系统做接口扩展,或者要把一组内部数据以标准方式暴露给上层应用调用,这两块几乎绕不开。永久存储解决的是对象状态怎么按规范存下来、再原样还原回去;列举器解决的是怎么把 v
会员 · 按档位
游客按标价购买,不享受上表折扣。
支付成功后自动发放网盘链接,链接失效可找客服免费补
这门课解决什么工作场景
这套资料聚焦于 ATL 在实际工程里的两块硬骨头:永久存储与列举器。如果你平时在维护遗留的 COM 组件、给旧系统做接口扩展,或者要把一组内部数据以标准方式暴露给上层应用调用,这两块几乎绕不开。永久存储解决的是对象状态怎么按规范存下来、再原样还原回去;列举器解决的是怎么把 vector 这类顺序容器里的数据,用标准接口一段段递出去,而不是整块拷贝。很多新手自己手写 IEnumXXX 会卡在引用计数、数据拷贝时机、线程模型这些细节上,这门课的价值就是把这套流程拆给你看,少踩坑。在老项目改造里,这两块直接决定了组件能不能被宿主程序正确识别和调度。
适合什么基础、怎么用资料
这套内容不适合零基础。你需要已经熟悉 C++ 基本语法、了解 COM 的接口与 IUnknown 机制,最好自己写过简单的 ATL 组件。资料里永久存储那几节会讲对象怎么序列化、Marshal As Value 的原理,建议先看这部分,因为它是后面列举器里数据拷贝策略的基础。列举器那几节,建议按顺序看 CComEnum 的基本用法,再看非拷贝形式和即用即创建的变体,重点对比不同拷贝策略在内存和性能上的取舍。配合练习时,先照着永久存储的例子实现一个能存取自身状态的小对象,再写一个把 vector 暴露成列举器的组件,跑通读写循环,就算把核心吃透了。遇到卡壳的地方,不要跳过,回头重看原理拆解部分,把接口调用顺序和引用计数的变更点对应上。
学完能独立做什么
学完之后,你应该能独立给一个 ATL 组件加上持久化能力,让它把内部字段按标准格式写到流里、再原样读回来,而不是自己造一套私有格式。列举器方面,你能根据数据量大小、是否需要类型转换,选择合适的列举方式:数据量小、生命周期简单就用自带拷贝;数据量大、不想全量复制就走非拷贝形式;调用方可能只取前几个、不想提前生成全量数据,就用即用即创建。这两块合起来,基本覆盖了日常开发里组件对外暴露状态和数据的典型场景,维护老项目或做接口适配时心里有底,不用再翻一堆零散文档拼凑方案。
课程目录
课程目录61 集
- 1-1 [永久存储] 永久存储简介 (55:16).mp4
- 1-2 [永久存储] 自己实现一个永久存储 (36:27).mp4
- 1-3 [永久存储] ATL实现永久存储的原理一 (01:12:30).mp4
- 1-4 [永久存储] ATL实现永久存储原理二 (55:28).mp4
- 1-5 [永久存储] Marshal As Value (47:55).mp4
- 2-1 [ATL列举器] ATL实现IEnumXXX举例 (34:41).mp4
- 2-2 [ATL列举器] CComEnum (45:38).mp4
- 2-3 [ATL列举器] CComEnum另外两种列举方法举例 (13:19).mp4
- 2-4 [ATL列举器] 列举顺序容器vector的非拷贝形式 (26:04).mp4
- 2-5 [ATL列举器] 自带拷贝和类型转换的列举 (17:28).mp4
- 2-6 [ATL列举器] 即用即创建的顺序容器 (22:33).mp4
- 2-7 [ATL列举器] 容器接口 (19:54).mp4
- 2-8 [ATL列举器] 垫片类CAdaptor (19:33).mp4
- 2-9 [ATL列举器] Atl提供的几个容器类 (42:44).mp4
- 3-1 [连接点] 连接点 (59:45).mp4
- 3-2 [连接点] 连接点的实现例子 (47:00).mp4
- 3-3 [连接点] 在DLL中制作接受连接点事件的对象 (49:16).mp4
- 3-4 [连接点] 接受连接点事件对象内部实现原理 (59:52).mp4
- 3-5 [连接点] 使用实例 (29:42).mp4
- 3-6 [连接点] IProviderClassInfo2 (18:25).mp4
- 4-1 [窗口和对话框] ATL中的windows窗口程序 (38:43).mp4
- 4-2 [窗口和对话框] SupClass (17:45).mp4
- 4-3 [窗口和对话框] 把一个窗口的所有东西做到一个类中(一) (51:08).mp4
- 4-4 [窗口和对话框] 把一个窗口放到一个类中(二) (01:09:20).mp4
- 4-5 [窗口和对话框] SupClass和ATL (27:59).mp4
- 4-6 [窗口和对话框] ATL中窗口类的注册 (52:20).mp4
- 4-7 [窗口和对话框] 设置窗口类类型以及窗口类型和扩展类型 (53:41).mp4
- 4-8 [窗口和对话框] 窗口消息处理过程 (54:39).mp4
- 4-9 [窗口和对话框] ATL窗口消息处理宏用法 (12:13).mp4
- 4-10 [窗口和对话框] ATL窗口消息处理宏结构 (11:18).mp4
- 4-11 [窗口和对话框] Command和Notify消息 (23:55).mp4
- 4-12 [窗口和对话框] 消息反弹技术 (01:06:30).mp4
- 4-13 [窗口和对话框] 消息上推技术 (36:20).mp4
- 4-14 [窗口和对话框] 消息链条和消息分类 (36:45).mp4
- 4-15 [窗口和对话框] 动态消息链 (29:51).mp4
- 4-16 [窗口和对话框] 对话框程序 (38:36).mp4
- 4-17 [窗口和对话框] CContainedWindow中的SuperClass技术 (53:24).mp4
- 4-18 [窗口和对话框] SubClass技术 (34:52).mp4
- 5-1 [属性页] 属性页的原理 (01:08:56).mp4
- 6-1 [控件] 属性页的原理 (01:08:56).mp4
- 6-2 [控件] 控件概述 (34:10).mp4
- 6-3 [控件] 容器侧规则一 (55:02).mp4
- 6-4 [控件] 容器侧规则二 (24:18).mp4
- 6-5 [控件] 控件规则一 (53:54).mp4
- 6-6 [控件] 控件规则二 (01:00:57).mp4
- 6-7 [控件] 阅读代码环境的搭建 (30:09).mp4
- 6-8 [控件] IOleObject在ATL中的实现一 (01:01:14).mp4
- 6-9 [控件] IOleObject在ATL中的实现二 (45:02).mp4
- 6-10 [控件] 控件是如何被激活的 (55:22).mp4
- 6-11 [控件] 控件的显示-有窗口(WM_PAINT) (32:46).mp4
- 6-12 [控件] IViewObject和无窗口控件的视图 (01:07:25).mp4
- 6-13 [控件] 控件侧的其他接口的实现 (01:27:28).mp4
- 6-14 [控件] 控件中的IPropertyNotifySink接口以及控件默 (01:03:56).mp4
- 6-15 [控件] 容器侧如何激活控件一 (01:01:17).mp4
- 6-16 [控件] 容器侧如何激活控件二 (41:41).mp4
- 6-17 [控件] 容器侧Control Site的实现一 (43:31).mp4
- 6-18 [控件] 容器侧ControlSite接口实现二 (40:29).mp4
- 6-19 [控件] 容器侧的ControlSite接口实现三 (48:44).mp4
- 6-20 [控件] ATL对话框上的控件 (35:08).mp4
- 6-21 [控件] 如何用带控件的对话框模板来创建对话框 (48:58).mp4
- 6-22 [控件] 复合控件和DHTML控件 (51:44).mp4





