2009-11-06 2 views
4

Il existe quelque chose comme __w64 dans Visual C++ 9. Je suis tombé dessus tout en essayant de porter ma DLL C++ native à 64 bits. En particulier dans crtdefs.h il y a ce joli bout:Comment utiliser _W64 et __w64 dans VC++?

#if !defined(_W64) 
#if !defined(__midl) && (defined(_X86_) || defined (_M_IX86)) && _MSC_VER >= 1300 
#define _W64 __w64 
#else 
#define _W64 
#endif 
#endif 

qui, si je reçois cela implique juste que pour 64 bits _W64 est défini comme une chaîne vide et n'a pas d'effet, mais pour 32 bits, il est défini comme __w64.

J'ai essayé de définir _W64 comme une chaîne vide et __w64 à tour de rôle et au moins les deux fois le projet compile bien en configuration 64 bits.

Cela dit à la fois _W64 et __w64 semblent inutiles. Comment ai-je l'intention de les utiliser et comment dois-je définir _W64 dans les projets 64 bits?

Répondre

2

La réponse est, vous n'avez pas. C'est une fonctionnalité de compilateur à utiliser par le compilateur 32 bits. L'idée originale était que Microsoft voulait préparer les programmeurs pour la prochaine transition 32-> 64 bits. Par conséquent, le compilateur 32 bits a acquis la capacité d'étiqueter certaines typedefs en tant que __w64. Microsoft a ensuite utilisé cette possibilité pour étiqueter typedefs qui changerait dans Win64.

9

__w64 a été utilisé pour marquer les types qui ont des tailles différentes dans les environnements 32 bits et 64 bits. Le compilateur peut alors émettre un avertissement lorsque vous attribuez un type peut-64 bits à un type 32 bits.

Si vous basculez la vue MSDN: __w64 vers la version la plus récente, vous pouvez voir que le mot-clé est obsolète. VC9 génère même un avertissement lorsque vous essayez de compiler avec l'option/Wp64.