Active Template Library ( ATL) es un conjunto de clases de C++ basadas en plantillas desarrolladas por Microsoft , destinadas a simplificar la programación de objetos del Modelo de objetos componentes (COM). La compatibilidad con COM en Microsoft Visual C++ permite a los desarrolladores crear una variedad de objetos COM, servidores de automatización OLE y controles ActiveX . [1] [2] ATL incluye un asistente de objetos que configura la estructura primaria de los objetos rápidamente con un mínimo de codificación manual. En el lado del cliente COM, ATL proporciona punteros inteligentes que se ocupan del recuento de referencias COM. La biblioteca hace un uso intensivo del patrón de plantilla curiosamente recurrente .
Los objetos COM también se pueden crear con Microsoft Foundation Classes (MFC), pero esto genera binarios más grandes que requieren DLL de soporte . [3] ATL, por otro lado, es una alternativa más liviana en situaciones donde no se requieren las partes de interfaz gráfica de usuario de MFC. [4]
En la versión 7 de ATL (Visual Studio 2003), que sucedió directamente a la versión 3 (Visual Studio 6.0), se pusieron a disposición en ATL varias clases MFC como CString o, más precisamente, se trasladaron a una capa común ATLMFC que comparten ambas bibliotecas. La versión 7 de ATL también introdujo atributos en C++ en un intento de proporcionar algo similar a los atributos CLI , sin embargo, estos no han tenido mucho éxito y se les ha restado importancia en la versión 8 de ATL (Visual Studio 2005); los distintos asistentes ya no los generan de forma predeterminada. La versión 7 también introdujo nuevas clases de conversión de cadenas.
El 28 de julio de 2009, Microsoft lanzó un parche para ATL para corregir un error que podría permitir que los controles ActiveX creados con ATL fueran vulnerables a una falla de seguridad de ejecución remota de código. [5]
Desde Visual Studio 2013, el código ATL en Visual C++ 2013 es estático, lo que elimina la DLL. [6]
ATL incluye muchas clases RAII para simplificar la gestión de los tipos COM. Las clases más utilizadas son:
CComPtr<T>
[7] puntero inteligente de propósito general,CComBSTR
[8] Envoltorio BSTR,CComVariant
[9] Envoltorio VARIANT, yCComSafeArray<T>
[10] Envoltorio SAFEARRAY.Aunque no forma parte formalmente de ATL, Microsoft Visual C++ también incluye clases RAII de C++ adicionales para simplificar la gestión de tipos COM. Estas clases de compatibilidad con COM del compilador se pueden utilizar como reemplazo o en combinación con ATL, e incluyen:
_com_ptr_t
[11] puntero inteligente que decora el nombre de la interfaz COM con un sufijo "Ptr",_bstr_t
[12] Envoltorio BSTR,_variant_t
[13] Envoltorio VARIANT, y_com_error
[14] Contenedor HRESULT.Tenga en cuenta que a partir de Visual Studio 2012, las clases de soporte COM del compilador no incluyen un contenedor SAFEARRAY.