ATL Projesi için Derleyici İyileştirmesi Belirtme
Varsayılan olarak, atl Denetim Sihirbazı atl_no_vtable makro yeni sınıflar aşağıdaki gibi oluşturur:
class ATL_NO_VTABLE CProjName
{
...
};
atl _atl_no_vtable sonra şu şekilde tanımlar:
#ifdef _ATL_DISABLE_NO_VTABLE
#define ATL_NO_VTABLE
#else
#define ATL_NO_VTABLE __declspec(novtable)
#endif
atl_no_vtable makro _ATL_DISABLE_NO_VTABLE tanımlamazsanız, genişleyen declspec(novtable).Kullanarak declspec(novtable)sınıf yapıcı ve yıkıcı başlatılmış bir sınıfta bildirimi vtable işaretçisinin engeller.Projenizi yapılandırdığınızda, bağlayıcı vtable ve tüm işlevleri olduğu vtable noktaları ortadan kaldırır.
atl_no_vtable, kullanmalısınız ve sonuç olarak declspec(novtable), yalnızca doğrudan oluşturulabilmelidir olmayan temel sınıflar ile.Değil kullanmanız gerekir declspec(novtable) , projenizin en türetilmiş sınıfla çünkü bu sınıf (genellikle CComObject, CComAggObject, veya CComPolyObject) projenizin vtable işaretçisinin başlatır.
Sanal işlevlerini kullanan herhangi bir nesneyi oluşturucudan çağırmanız gerekir değil declspec(novtable).Bu çağrıları taşımalısınız FinalConstruct yöntem.
Olup, kullanmanız gereken kullanacağınızdan emin değilseniz declspec(novtable) değiştiricisi, atl_no_vtable makro herhangi bir sınıf tanımını kaldırın ya da genel olarak belirterek iptal edebilirsiniz
#define _ATL_DISABLE_NO_VTABLE
Stdafx.h öğesinde önce tüm atl başlık dosyaları dahil edilir.
Ayrıca bkz.
Görevler
Uygulama Sihirbazları Kullanarak Masaüstü Projeleri Oluşturma
Başvuru
atl com nesnelerinin temelleri
Varsayılan ATL Proje Yapılandırmaları