ATL和WTL有什么区别?

11

我知道"WTL建立在ATL之上",但从实际角度来看这是什么意思?

在功能方面,ATL是WTL的子集吗? (即:ATL中的所有功能是否也存在于WTL中?) 我注意到维基百科表示ATL的开发状态是"current",而WTL最近的版本发布时间是2009年中期。这是否意味着如果我想使用Glass/Aero和其他Windows 7功能编写软件,我不能使用WTL?ATL呢?

在使用ATL与WTL编写程序时,是否存在性能/内存方面的差异?

3个回答

17

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

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

WTL最初应该与ATL一起使用,它涵盖了与GUI相关的方面,例如常见控件的轻量级包装、GDI对象、应用程序GUI框架、框架/视频模型、自定义控件。它提供了CString类,在ATL开始使用它之前就提供了。这是两个库重叠的地方之一。在WTL成为开源并且Microsoft提供了免费版的Visual Studio之后,WTL也更新为可以不使用ATL而使用免费工具来构建应用程序。


8
是的。WTL是建立在ATL之上的。然而,将ATL称为子集是不正确的。ATL作为一种基于模板的替代方法,独立于在Windows操作系统上进行编程的MFC方法。代码膨胀要少得多。ATL几乎涉及除实际窗口、对话框等之外的所有内容。
WTL是MFC窗口模型的模板替代品,就像ATL提供了其他窗口服务的替代品一样。WTL需要ATL。并非相反。
Dunn在codeproject上的文章对WTL进行了很好的评论。 WTL for MFC Programmers, Part I - ATL GUI Classes是系列中的第一篇文章。导航链接位于每个文章底部。

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接