Especificando o otimização de compilador para um projeto do ATL
Por padrão, a Assistente de controle do ATL gera novos clsistema autônomoses com macro ATL_NO_VTABLE, sistema autônomo segue:
class ATL_NO_VTABLE CProjName
{
...
};
ATL, em seguida, define _ATL_NO_VTABLE da seguinte maneira:
#ifdef _ATL_DISABLE_NO_VTABLE
#define ATL_NO_VTABLE
#else
#define ATL_NO_VTABLE __declspec(novtable)
#endif
Se você não definir _ATL_DISABLE_NO_VTABLE, a macro ATL_NO_VTABLE se expandirá para declspec(novtable). Usando declspec(novtable)em uma classe declaração impede que o ponteiro vtable sendo inicializado no construtor da classe e do destruidor. Quando você compila seu projeto, o vinculador elimina o vtable e todas as funções para o qual aponta o vtable.
Você deve usar ATL_NO_VTABLE e, conseqüentemente, declspec(novtable), com base somente classes que não são diretamente creatable. Você não deve usar declspec(novtable) com a classe derivada de mais no seu projeto, porque isso de classe (normalmente CComObject, CComAggObject, or CComPolyObject) inicializa o ponteiro vtable para seu projeto.
Você não deve chamar funções virtual do construtor de qualquer objeto que usa declspec(novtable). Você deve mover essas chamadas para o FinalConstruct método.
Se você não tiver certeza se deve usar o declspec(novtable) modificador, você pode remover macro ATL_NO_VTABLE de qualquer definição de classe ou você pode desativá-lo globalmente, especificando
#define _ATL_DISABLE_NO_VTABLE
em stdafx.h, antes de todos os Outros ATL arquivos de cabeçalho estão incluídos.
Consulte também
Tarefas
Criando projetos com assistentes de aplicativo
Conceitos
Programação com ATL e código de tempo de execução C