Share via


Especificar optimizaciones del compilador para un proyecto ATL

Actualización: noviembre 2007

De manera predeterminada, el Asistente para controles ATL genera clases nuevas con la macro ATL_NO_VTABLE, como se indica a continuación:

class ATL_NO_VTABLE CProjName
{
   ...
};

Después ATL define _ATL_NO_VTABLE de la manera siguiente:

#ifdef _ATL_DISABLE_NO_VTABLE
   #define ATL_NO_VTABLE
#else
   #define ATL_NO_VTABLE __declspec(novtable)
#endif

Si no define _ATL_DISABLE_NO_VTABLE, la macro ATL_NO_VTABLE se expande a declspec(novtable). Si se utiliza declspec(novtable) en una declaración de clase, se evita la inicialización del puntero vtable en el constructor y el destructor de clase. Cuando genere el proyecto, el vinculador eliminará vtable y todas las funciones a las que apunte vtable.

Debe utilizar ATL_NO_VTABLE y, en consecuencia, declspec(novtable), únicamente con clases base que no se puedan crear directamente. No debe utilizar declspec(novtable) con la clase más derivada del proyecto, ya que esta clase (normalmente CComObject, CComAggObject o CComPolyObject) inicializa el puntero vtable para el proyecto.

No debe llamar a funciones virtuales desde el constructor de un objeto que utilice declspec(novtable). Debe mover esas llamadas al método FinalConstruct.

Si no está seguro de si debe utilizar el modificador declspec(novtable), puede quitar la macro ATL_NO_VTABLE de cualquier definición de clase o puede deshabilitarla globalmente especificando

#define _ATL_DISABLE_NO_VTABLE

en stdafx.h, antes de incluir los demás archivos de encabezado ATL.

Vea también

Tareas

Crear proyectos con asistentes para aplicaciones

Conceptos

Proyectos de Visual C++

Programming with ATL and C Run-Time Code

Referencia

Asistente para proyectos ATL

Fundamentals of ATL COM Objects

novtable

Configuraciones predeterminadas de un proyecto ATL