11
votes

Comment détecter "Utiliser le MFC" dans le préprocesseur

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


0 commentaires

3 Réponses :


2
votes

Le symbole _afx est généralement défini pour les projets MFC.


2 commentaires

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.



12
votes

J'ai toujours vérifié le symbole _mfc_ver étant défini.

Ceci est le numéro de version de MFC utilisé 0x0700 = 7.0

Il se trouve dans les "Macros prédéfinies" dans MSDN


0 commentaires

4
votes

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 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.

  • 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:

    • a) Sélectionnez "Utiliser MFC dans une option de DLL partagée". Cela met actuellement à jour les paramètres de ligne de commande ajoutant la définition de _AFXDLL à la liste de macro de pré-processeur.
    • B) Sélectionnez "Utiliser MFC dans une bibliothèque statique". Cela retirez effectivement la macro _AFXDLL définie, mais aucune définition de macro est ajoutée, alors rien ne peut vous dire si MFC est réellement utilisé.

      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.

      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: xxx

      éviditude, vous pouvez ajouter manuellement une définition de macro (_AFX) dans la liste de préprocesseur de projet.


0 commentaires