2009-07-28 13 views

Odpowiedz

10

Zawsze sprawdzałem, czy zdefiniowano symbol _MFC_VER.

to numer wersji MFC wykorzystywane 0x0700 = 7,0

Jest w „predefiniowanych makr” w MSDN

0

_AFX jest zazwyczaj definiowany przez projekty MFC symboli.

+0

Myślałem, że również muhc, ale po włączeniu opcji "Użyj MFC w bibliotece dynamicznej" dla projektu biblioteki Win32 (utworzonego bez opcji "Obsługa MFC"), to makro nie jest zdefiniowane. – peterchen

+0

Jak powiedział @peterchen, _AFX nie jest zdefiniowany, jeśli opcja MFC jako biblioteka dynamiczna jest aktywna, ale zamiast niej _AFXDLL. – Mouze

3

mam sprawdzić w Visual Studio 2013, w oryginalnym projekcie kierowania tylko Win32 konsoli, więc muszę dodać obsługę MFC (bez korzystania z Kreatora projektu) po raz drugi. Poniżej znajdują się moje ustalenia:

  • Makro _MFC_VER jest zdefiniowane w afxver_.h, dołączone przez afx.h. Jeśli więc nie dołączasz afx.h bezpośrednio/pośrednio do pliku .cpp, nie masz zdefiniowanego makra _MFC_VER. Na przykład, dołączając do projektu źródło .cpp, które nie zawiera afx.h, plik zostanie skompilowany BEZ definicji makra _MFC_VER. Nie ma więc sensu przystosowywać kodu C++ (np. Biblioteki zewnętrznej) do wykrywania użycia biblioteki MFC i opcjonalnie obsługiwać bibliotekę MFC.

  • Jeśli ręcznie włączyć wykorzystaniu MFC (wybierz projekt w Solution Explorer, niż prawe kliknięcie Właściwości konfiguracyjne -> Ogólne -> Korzystanie z MFC) masz dwie możliwości:

    • A) wybierz opcję "Użyj MFC w udostępnionej bibliotece DLL". To faktycznie aktualizuje parametry wiersza poleceń dodając definicję _AFXDLL do listy makr preprocesora.
    • B) wybierz opcję "Użyj MFC w bibliotece statycznej". To faktycznie usuwa zdefiniowane makro _AFXDLL, ale nie jest dodawana definicja makra, więc nic nie może ci powiedzieć, czy faktycznie jest używane MFC.

więc podczas mojej działalności testowym, tylko tryb A może być skutecznie wykorzystywane do zrozumienia, jeśli biblioteka MFC jest włączone lub nie w ramach projektu budynku.

Posiadam bibliotekę wieloplatformową C++, która obsługuje wiele platform (Mac OSx, konsola WinX, WinX MFC, iOS, Unix, Android) i włączam MFC z dynamiczną biblioteką DLL, to jedyny sposób na przezroczyste wykrywanie obecności MFC. Tak więc na przykład:

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

Obviusly, można dodać ręcznie makro rozdzielczości (_AFX) na liście preprocesora projekt.