The Active Template Library (ATL) is a set of template-based C++ classes developed by Microsoft, intended to simplify the programming of Component Object Model (COM) objects. The COM support in Microsoft Visual C++ allows developers to create a variety of COM objects, OLE Automation servers, and ActiveX controls.[1][2] ATL includes an object wizard that sets up primary structure of the objects quickly with a minimum of hand coding. On the COM client side ATL provides smart pointers that deal with COM reference counting. The library makes heavy use of the curiously recurring template pattern.
| Active Template Library | |
|---|---|
| Developer | Microsoft |
| Written in | C++ |
| Operating system | Microsoft Windows |
| Type | Library or framework |
| License | Proprietary |
History
editCOM objects can also be created with Microsoft Foundation Classes (MFC), but this leads to larger binaries that require support DLLs.[3] ATL, on the other hand, is a more lightweight alternative in situations where the graphical user interface parts of MFC are not required.[4]
Older versions of ATL (ATL prior to version 7.1, pre-Visual Studio 2005) are incompatible with DEP because it places executable thunks in data heap.[5][6][7] This problem can be mitigated with DEP-ATL thunk emulation with performance penalty.[8][9]
In ATL version 7 (Visual Studio 2003), which directly succeeded version 3 (Visual Studio 6.0), a number of MFC classes like CString were made available in ATL, or more precisely moved to an ATLMFC common layer which is shared by both libraries. ATL version 7 also introduced attributes in C++ in an attempt to provide something similar to CLI attributes, however these have not been particularly successful, and have been deemphasized in ATL version 8 (Visual Studio 2005); the various wizards no longer generate them by default. Version 7 also introduced new string conversion classes.
On July 28, 2009, Microsoft released a patch to ATL to fix a bug that could allow ActiveX controls created using ATL to be vulnerable to a remote code execution security flaw.[10]
Since Visual Studio 2013 (ATL version 12), all ATL code is static, eliminating the DLL.[11][12]
ATL version is defined by ATL_VER macros and can be queried via AtlGetVersion() function.[13]
Support classes
editCompiler COM support
editAlthough not formally part of ATL, Microsoft Visual C++ also includes additional C++ RAII classes to simplify management of COM types. These compiler COM support classes can be used as replacement for or in combination with ATL, and includes:
_com_ptr_t[18] smart-pointer that decorates the COM interface name with a "Ptr" suffix,_bstr_t[19] BSTR wrapper,_variant_t[20] VARIANT wrapper, and_com_error[21] HRESULT wrapper.
Note that as of Visual Studio 2012, the compiler COM support classes does not include a SAFEARRAY wrapper.
See also
editReferences
edit- ↑ Grimes, Richard (1998). "ATL and COM". ATL COM (1st ed.). Wrox Press. p. 6. ISBN 1-86100-249-1.
- ↑ Grimes, Richard (1999). "Building and calling a COM object using ATL". Beginning ATL 3 COM Programming (1st ed.). Wrox Press. p. 63. ISBN 978-1-86100-120-7.
- ↑ Williams, Mickey (2000). "Active Documents". Visual C++ 6 Unleashed (1st ed.). Sams. p. 733. ISBN 978-0-672-31241-0.
- ↑ Microsoft MSDN: Recommendations for Choosing Between ATL and MFC
- ↑ "Michael Howard's Web Log". Archived from the original on 2008-01-30. Retrieved 2008-01-30.
- ↑ "New NX APIs added to Windows Vista SP1, Windows XP SP3 and Windows Server 2008".
- ↑ "Understanding DEP as a mitigation technology part 1 | MSRC Blog | Microsoft Security Response Center".
- ↑ "Applications Using Older ATL Components May Experience Conflicts with DEP". Archived from the original on 2009-01-23. Retrieved 2009-01-23.
- ↑ "UpdateProcThreadAttribute function (Processthreadsapi.h) - Win32 apps".
- ↑ "ATL Security Update". MSDN. Microsoft. 2009-07-28. Retrieved 2011-09-19.
- ↑ "ATL and MFC changes and fixes in Visual Studio 2013". 20 August 2013. Archived from the original on 2013-08-27. Retrieved 2013-08-27.
- ↑ "ATL and MFC changes and fixes in Visual Studio 2013". 20 August 2013.
- ↑ "ATL Text Encoding Functions".
- ↑ Microsoft MSDN: CComPtr Class
- ↑ Microsoft MSDN: CComBSTR Class
- ↑ Microsoft MSDN: CComVariant Class
- ↑ Microsoft MSDN: CComSafeArray Class
- ↑ Microsoft MSDN: _com_ptr_t Class
- ↑ Microsoft MSDN: _bstr_t Class
- ↑ Microsoft MSDN: _variant_t Class
- ↑ Microsoft MSDN: _com_error Class