ATL Projesinde Derleyici İyileştirmesi Belirtme
Varsayılan olarak, ATL Denetim Sihirbazı aşağıdaki gibi ATL_NO_VTABLE makroyla yeni sınıflar oluşturur:
class ATL_NO_VTABLE CProjName
{
...
};
ATL daha sonra _ATL_NO_VTABLE aşağıdaki gibi tanımlar:
#ifdef _ATL_DISABLE_NO_VTABLE
#define ATL_NO_VTABLE
#else
#define ATL_NO_VTABLE __declspec(novtable)
#endif
_ATL_DISABLE_NO_VTABLE tanımlamazsanız, ATL_NO_VTABLE makro olarak declspec(novtable)
genişletir. Bir sınıf bildiriminde kullanmak declspec(novtable)
, vtable işaretçisinin sınıf oluşturucusunda ve yıkıcısında başlatılmasını engeller. Projenizi oluşturduğunuzda bağlayıcı, vtable'ı ve vtable'ın işaret ettiği tüm işlevleri ortadan kaldırır.
yalnızca doğrudan creatable olmayan temel sınıflarla ATL_NO_VTABLE ve sonuç olarak declspec(novtable)
kullanmanız gerekir. Bu sınıf (genellikle CComObject, CComAggObject veya CComPolyObject) projeniz için vtable işaretçisini başlattığından, projenizdeki en türetilmiş sınıfla kullanmamalısınızdeclspec(novtable)
.
kullanan declspec(novtable)
herhangi bir nesnenin oluşturucusundan sanal işlevleri çağırmamalısınız. Bu çağrıları FinalConstruct yöntemine taşımanız gerekir.
Değiştiriciyi declspec(novtable)
kullanmanız gerekip gerekmediğinden emin değilseniz, ATL_NO_VTABLE makroyu herhangi bir sınıf tanımından kaldırabilir veya belirterek genel olarak devre dışı bırakabilirsiniz
#define _ATL_DISABLE_NO_VTABLE
pch.h'de (Visual Studio 2017 ve önceki sürümlerde stdafx.h), diğer tüm ATL üst bilgi dosyaları eklenmeden önce.
Ayrıca bkz.
ATL Projesi Sihirbazı
Visual Studio'da C++ proje türleri
ATL ve C Çalışma Zamanı Koduyla Programlama
ATL COM Nesnelerinin Temelleri
novtable
Varsayılan ATL Projesi Yapılandırmaları