Pour une bibliothèque Win32 statique, comment puis-je détecter que l'une des options "Utiliser le MFC" est définie?
I.e. P>
#ifdef ---BuildingForMFC--- .... #else ... #endif
3 Réponses :
Le symbole _afx code> est généralement défini pour les projets MFC. P>
Je pensais aussi MUHC, mais lorsque vous activez "Utiliser MFC dans une bibliothèque dynamique" pour un projet de bibliothèque Win32 (qui a été créé sans option "MFC support"), cette macro n'est pas définie.
Comme @peterchen a dit, _AFX n'est pas défini si MFC comme option de bibliothèque dynamique est active, mais _AFXDLL à la place.
J'ai toujours vérifié le symbole _mfc_ver étant défini. p>
Ceci est le numéro de version de MFC utilisé 0x0700 = 7.0 P>
Il se trouve dans les "Macros prédéfinies" dans MSDN P>
J'ai vérifié sur Visual Studio 2013, dans un projet d'origine ciblant uniquement la console Win32, vous devez donc ajouter un support MFC (sans utiliser l'assistant de projet) dans une seconde fois. Voici mes conclusions:
La macro _mfc_ver est définie dans l'AFXVER_.H, incluse par AFX.H. Donc, si vous n'incluez pas AFX.H directement / indirectement dans votre fichier .CPP, vous n'avez pas la macro _mfc_ver définie. Par exemple, y compris dans un projet, une source .CPP qui n'inclut pas l'AFX.H, le fichier sera compilé sans em> la définition de _mfc_ver macro. Il est donc inutile d'adapter le code C ++ (une bibliothèque externe, par exemple) pour détecter l'utilisation de la bibliothèque MFC et prend éventuellement prendre en charge la bibliothèque MFC. P> LI>
Si vous allumez manuellement l'utilisation de MFC (sélectionnez le projet dans l'explorateur de solution, clic droit, Propriétés de configuration -> Général -> Utilisation de MFC) Vous avez deux possibilités: P>
Donc, au cours de mon activité de test, seul le mode A peut être utilisé efficacement pour comprendre si la bibliothèque MFC est incluse ou non dans le projet sous le bâtiment. P> Je maintiens une croix C ++ -Platform Bibliothèque prenant en charge de nombreuses plateformes (Mac OSX, WinX Console, Winx MFC, iOS, UNIX, Android) et activant MFC avec DLL dynamique est le seul moyen de détecter de manière transparente la présence MFC. Donc, par exemple: p> éviditude, vous pouvez ajouter manuellement une définition de macro (_AFX) dans la liste de préprocesseur de projet. P> P>