Où est défini WIN32 et comment puis-je inclure cette définition dans mon projet?

J’inclus un en-tête et un fichier source tiers dans mon projet.

En haut de l’en-tête se trouve ceci:

#if defined(WIN32) || defined(WIN16) #ifndef MSDOS #define MSDOS #endif #endif #include  #include  #ifndef MSDOS #include  #endif #include "des.h" 

Le problème est que #if defini (WIN32) échoue et que la compilation échoue lors de la tentative d’inclusion de #include unistd.h, ce que je ne veux pas faire.

J’ai un projet tiers qui fonctionne avec ce fichier d’en-tête, c’est-à-dire que WIN32 est défini et qu’il n’essaie pas d’inclure dans Visual Studio, j’ai “Aller à la définition” sur “WIN32” et a été amené à la définition suivante dans WinDefs.h.

 #define WIN32 

Je ne suis pas sûr que ce soit là d’où il tire la définition WIN32, car le projet tiers ne semble pas inclure “WinDefs.h”.

Mon problème est donc: comment puis-je définir WIN32 dans mon nouveau projet actuel?

Cela dépend de la configuration de votre projet. WIN32 est défini dans les fichiers d’en-tête de Windows, mais vous pouvez également le transmettre au compilateur (“-DWIN32” pour gcc par exemple). Essayez-le et voyez s’il comstack.

Visual Studio a la définition intégrée _WIN32. mingw-gcc a WIN32 et _WIN32 intégrés, de sorte que le projet a probablement été testé avec gcc. Vous pourriez append

 #if defined(_WIN32) && !defined(WIN32) #define WIN32 #endif 

ou simplement append un -DWIN32 au CFLAGS.

Vérifiez vos inclus. Je devine que l’en-tête de tiers est inclus avant le windows.h. Donc, dans votre main.cpp ou équivalent, il devrait être

 #include  // this will also include windefs.h #include  

et non l’inverse.

J’espère que cela pourra aider.

Vous pouvez simplement inclure les fichiers d’en-tête de Windows (windows.h) avant d’inclure l’en-tête de tiers. Comme vous l’avez déjà constaté, WIN32 y est défini, mais techniquement, il peut être défini n’importe où (donc si le projet tiers n’inclut pas la vérification des en-têtes de Windows s’il est défini directement dans le projet du compilateur).

En outre, il existe également une définition _WIN32 définie par le compilateur. Il est peut-être préférable de rechercher cette définition si la vérification du code est en cours de compilation sous Windows;

Pour ceux qui cherchent des réponses à la

où est défini WIN32

une partie des questions, je l’ai trouvée définie dans:

minwindef.h

ole2.h

Notez que je ne suis pas convaincu que ce sont les seuls endroits définis. Je suppose qu’il y a probablement d’autres fichiers où c’est défini. Néanmoins, j’ai pensé que cela pourrait aider certaines personnes.

Certains WIN32 définis dans le compilateur. Juste comme ceci , Si vous utilisez le gcc pour Windows, WIN32 est défini. Si vous utilisez le gcc pour Linux, WIN32 n’est pas défini 🙂
Donc, les macros sont un commutateur. Vous pouvez le définir pour utiliser quelque chose, et non pas pour ne pas utiliser quelque chose.