W przypadku statycznej biblioteki Win32, jak wykryć, że jest ustawiona opcja "Użyj MFC"?Jak wykryć "Użyj MFC" w preprocesorze
tj
#ifdef ---BuildingForMFC---
....
#else
...
#endif
W przypadku statycznej biblioteki Win32, jak wykryć, że jest ustawiona opcja "Użyj MFC"?Jak wykryć "Użyj MFC" w preprocesorze
tj
#ifdef ---BuildingForMFC---
....
#else
...
#endif
Zawsze sprawdzałem, czy zdefiniowano symbol _MFC_VER.
to numer wersji MFC wykorzystywane 0x0700 = 7,0
Jest w „predefiniowanych makr” w MSDN
_AFX
jest zazwyczaj definiowany przez projekty MFC symboli.
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:
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.
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
Jak powiedział @peterchen, _AFX nie jest zdefiniowany, jeśli opcja MFC jako biblioteka dynamiczna jest aktywna, ale zamiast niej _AFXDLL. – Mouze