2009-07-28 27 views

cevap

10

_MFC_VER tanımlı sembolü her zaman kontrol ettim.

Bu

MFC sürüm numarası 0x0700 kullanılıyor = 7.0

Bu MSDN

yılında "Önceden tanımlanmış makrolar" I Visual Studio 2013 tarihinde kontrol ettik
0

_AFX tipik olarak MFC projeleri için tanımlandığı sembolü.

+0

Çok muhc da düşündüm, ancak bir Win32 Kitaplığı projesi için "MFC desteği olmadan oluşturulmuş" bir dinamik kitaplıkta "MFC kullan" seçeneğini etkinleştirirken, bu makro tanımlanmadı. – peterchen

+0

@peterchen dediği gibi MFC gibi dinamik kütüphane seçenek yerine etkindir, ancak _AFXDLL eğer _AFX tanımlı değil. – Mouze

3

olduğunu özgün bir projede sadece Win32 hedefleyen konsol, bu yüzden MFC desteğini (Proje Sihirbazı'nı kullanmadan) ikinci kez ekleyeceğim. Aşağıdaki benim bulgular şunlardır:

  • makro _MFC_VER afx.h. tarafından dahil, afxver_.h tanımlanır doğrudan AFX.H dahil etmezseniz Yani,/dolaylı .cpp dosyasında, tanımladığınız _MFC_VER makro yok. Örneğin, bir projede afx.h içermeyen bir kaynak .cpp dahil olmak üzere, dosya, OLMADAN _MFC_VER makrosu tanımında derlenecektir. Bu yüzden, MFC kütüphanesinin kullanımını tespit etmek ve isteğe bağlı olarak MFC kütüphanesini desteklemek için C++ kodunu (örneğin bir harici kütüphane) uyarlamak işe yaramaz.

    • A):
    • el MFC kullanımı açarsanız

      (sağ tıklama dışında, Solution Explorer'da projeyi seçin, Konfigürasyon Özellikleri - -> Genel MFC> Kullanım) Eğer iki ihtimal var "Paylaşılan bir DLL MFC kullanın" seçeneğini seçin. Bu aslında, önişlemci makro listesine _AFXDLL tanımını ekleyen komut satırı parametrelerini günceller.
    • B) "Statik Kütüphanede MFC Kullan" seçeneklerini seçin. Bu, aslında tanımlanan _AFXDLL makrosunu kaldırır, ancak hiçbir makro tanımı eklenmez, bu nedenle MFC aslında kullanıldığında hiçbir şey size söylenemez.

Yani, benim test faaliyeti sırasında, sadece mod A MFC kütüphanesi binanın altında projesine dahil olup olmadığını anlamak için etkili bir şekilde kullanılabilir.

Birçok platformları (Mac OSx, WinX konsolu, WinX MFC, iOS, Unix, Android) destekleyen ve dinamik DLL ile MFC'yi etkinleştiren bir C++ çapraz platform kitaplığını MFC'nin varlığını şeffaf olarak algılamanın tek yolu olduğunu düşünüyorum. Örneğin Yani:

#if defined(_AFXDLL) 
# include <afx.h> 
#endif 

obviusly el proje önişlemci listesinde bir makro tanımını (_AFX) ekleyebilir.