我知道"WTL建立在ATL之上",但从实际角度来看这是什么意思?
在功能方面,ATL是WTL的子集吗? (即:ATL中的所有功能是否也存在于WTL中?) 我注意到维基百科表示ATL的开发状态是"current",而WTL最近的版本发布时间是2009年中期。这是否意味着如果我想使用Glass/Aero和其他Windows 7功能编写软件,我不能使用WTL?ATL呢?
在使用ATL与WTL编写程序时,是否存在性能/内存方面的差异?
ATL是Microsoft C++库,主要实现了COM基础库。它的一部分也针对ActiveX控件(这绝对不是整个库的主要目标),还包括相关内容,如HWND
的薄包装(CWindow
类)、字符串操作类CString
、CStringA
、CStringW
、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而使用免费工具来构建应用程序。
ATL是为ActiveX控件创建的,即存在于独立应用程序中的控件。WTL旨在填补ATL中的空白,通过提供应用程序本身的类来实现。它们旨在一起使用。