La biblioteca de plantillas activas (ATL) es un conjunto de clases 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 archivos binarios más grandes que requieren soporte para archivos DLL . [3] ATL, por otro lado, es una alternativa más liviana en situaciones donde las partes de la interfaz gráfica de usuario de MFC no son necesarias. [4]
En la versión 7 de ATL (Visual Studio 2003), que sucedió directamente a la versión 3 (Visual Studio 6.0), varias clases MFC como CString estuvieron disponibles en ATL o, más precisamente, se trasladaron a una capa común ATLMFC que comparten ambas bibliotecas. ATL versión 7 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 ATL versión 8 (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 tipos COM. Las clases más utilizadas incluyen:
CComPtr<T>
[7] puntero inteligente de uso 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 administración de tipos COM. Estas clases de soporte COM del compilador se pueden usar 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] Envoltorio HRESULT.Tenga en cuenta que a partir de Visual Studio 2012, las clases de soporte COM del compilador no incluyen un contenedor SAFEARRAY.