Compartilhar via


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

Visual projetos C++

Programação com ATL e código de tempo de execução C

Referência

ATL projeto assistente

Conceitos básicos do ATL COM objetos

novtable

Configurações de projeto ATL padrão