ATL 和 WTL 有什么区别?
我知道“WTL builds on ATL”,但这在实际中意味着什么?
就功能而言,ATL 是 WTL 的子集吗? (即 ATL 中的所有功能也存在于 WTL 中吗?)我注意到 Wikipedia 指出 ATL 的开发状态是“当前”,而 WTL 的最新版本是从 2009 年中期开始的。这是否意味着如果我想使用 Glass/Aero 和其他 Windows 7 功能编写 Windows 7 软件,那么我不能使用 WTL 来实现?那么ATL呢?
使用 ATL 与 WTL 编写程序在性能/内存方面是否存在差异?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
ATL 是 Microsoft C++ 库,主要实现 COM 基础。它的一部分还针对 ActiveX 控件(这绝对不是整个库的主要目标),并且还涵盖了相关内容,例如
HWND
的瘦包装器(CWindow
类) )、字符串操作类CString
、CStringA
、CStringW
、ANSI/Unicode 转换等。ATL 的一部分分支为开源 ATL Server 库托管在 CodePlex 上。您仍然可以在 MSDN 上找到一些相关文档,选择 ATL 版本回 Visual Studio 版本 2002/2003/2005。这主要涵盖 Web 开发、IIS 内容,还包括正则表达式等内容。
WTL 最初应该与 ATL 一起使用,并涵盖 GUI 相关方面,例如公共控件上的瘦包装器、GDI 对象、应用程序 GUI 框架、帧/视频模型、自定义控件。它在 ATL 开始这样做之前就提供了 CString 类,这是两个库重叠的地方之一。在 WTL 开源并且 Microsoft 提供了免费版本的 Visual Studio 后,WTL 也更新为无需 ATL 即可使用,因此使用免费工具构建应用程序可能会有所帮助。
ATL is the Microsoft C++ library which primarily implements COM base. A part of it also targets ActiveX controls (which is definitely not a primary goal of the whole library) and it also covers related stuff such as thin wrapper of
HWND
(CWindow
class), string manipulation classesCString
,CStringA
,CStringW
, ANSI/Unicode conversion etc.A part of ATL was branched off into open source ATL Server library hosted on CodePlex. You can still find some documentation for it on MSDN choosing ATL version back to Visual Studio versions 2002/2003/2005. This mostly covers web development, IIS stuff, and also includes things like regular expressions.
WTL was originally supposed to be used with ATL, and covers GUI related aspects, such as thin wrappers over common controls, GDI object, application GUI framework, frame/video model, custom controls. It provided
CString
class before ATL started doing so, and this is one of the things where the two libraries overlap. After WTL went opens source and Microsoft provided free version of Visual Studio, WTL was also updated to be used without ATL so that it could be helpful to build apps using free only tools.是的。 WTL 构建于 ATL 之上。然而,将 ATL 称为子集是不正确的。 ATL 本身是 Windows 操作系统上 MFC 编程方法的基于模板的替代方案。代码膨胀要少得多。 ATL 处理除实际窗口、对话框等之外的几乎所有内容。WTL
是 MFC 窗口模型的模板替代方案,就像 ATL 提供其他 Windows 服务的替代方案一样。 WTL需要ATL。反之则不然。
Codeproject 上的 Dunn 文章对 WTL 进行了很好的回顾。
面向 MFC 程序员的 WTL,第一部分- ATL GUI 类 是该系列中的第一个。该系列其他文章的导航链接位于每篇文章的底部。
Yes. WTL builds on ATL. However, to call ATL a subset is incorrect. ATL stands on its own as a template based alternative to the MFC approach of programming on Windows OSs. There is much less code bloat. ATL deals with pretty much everything except actual windows, dialogs, etc.
WTL is a template alternative to the MFC windowing model in the same way that ATL provides an alternative to other windows services. WTL needs ATL. Not the other way around.
The Dunn articles on codeproject provide a pretty good review of WTL.
WTL for MFC Programmers, Part I - ATL GUI Classes is the first in the series. Navigation links the to other articles in the series are at the bottom of each one.
ATL 是为ActiveX 控件(即存在于独立应用程序中的控件)创建的。 WTL 旨在通过为应用程序本身提供类来填补 ATL 中的漏洞。它们应该一起使用。
ATL was created for ActiveX controls, i.e. controls that exist in an independent application. WTL is meant to fill in the holes in ATL, by providing classes for the application itself. They are meant to be used together.