11

我知道“WTL建立在ATL 之上”,但这实际上意味着什么?

就功能而言,ATL 是 WTL 的子集吗?(即 ATL 中的所有功能是否也存在于 WTL 中?)我注意到 Wikipedia 指出 ATL 的开发状态是“当前”,而 WTL 的最新版本是从 2009 年中期开始的。这是否意味着如果我想使用 Glass/Aero 和其他 Windows 7 功能编写 Windows 7 软件,那么我不能使用 WTL 来完成它?ATL呢?

在 ATL 和 WTL 中编写程序是否有任何性能/内存差异?

4

3 回答 3

16

ATL 是主要实现 COM 基础的 Microsoft C++ 库。它的一部分还针对 ActiveX 控件(这绝对不是整个库的主要目标),它还涵盖了相关的东西,例如HWND(类)的薄包装、CWindow字符串操作类CString、、、ANSI/Unicode 转换等。CStringACStringW

ATL 的一部分被分支到托管在 CodePlex 上的开源ATL Server库中。您仍然可以在 MSDN 上找到一些文档,将 ATL 版本选择回 Visual Studio 版本 2002/2003/2005。这主要涵盖 Web 开发、IIS 内容,还包括正则表达式等内容。

WTL 最初应该与 ATL 一起使用,并涵盖与 GUI 相关的方面,例如通用控件的瘦包装器、GDI 对象、应用程序 GUI 框架、帧/视频模型、自定义控件。它CString在 ATL 开始这样做之前提供了类,这是两个库重叠的地方之一。在 WTL 开源并且微软提供了免费版本的 Visual Studio 之后,WTL 也被更新为可以在没有 ATL 的情况下使用,因此它有助于使用仅免费的工具构建应用程序。

于 2011-10-19T06:23:59.643 回答
8

是的。WTL 建立在 ATL 之上。但是,调用 ATL 子集是不正确的。ATL 独立作为在 Windows 操作系统上编程的 MFC 方法的基于模板的替代方案。代码膨胀要少得多。ATL 处理几乎所有东西,除了实际的窗口、对话框等。

WTL 是 MFC 窗口模型的模板替代方案,就像 ATL 提供其他窗口服务的替代方案一样。WTL 需要 ATL。不是反过来。

关于 codeproject 的 Dunn 文章对 WTL 进行了很好的回顾。

面向 MFC 程序员的 WTL,第 I 部分 - ATL GUI 类是该系列的第一篇。指向系列中其他文章的导航链接位于每篇文章的底部。

于 2012-11-09T18:21:09.120 回答
2

ATL 是为 ActiveX 控件创建的,即存在于独立应用程序中的控件。WTL 旨在通过为应用程序本身提供类来填补 ATL 中的漏洞。它们旨在一起使用。

于 2011-10-19T04:19:24.547 回答