2009-11-06 95 views
4

在Visual C++ 9中有__w64这样的东西。我在试图将我的本机C++ DLL移植到64位时碰到它。尤其是在crtdefs.h有这个漂亮的片段:如何在VC++中使用_W64和__w64?

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

它,如果我得到它的权利意味着,对于64位_W64被定义为一个空字符串,并没有任何影响,但对于32位被定义为__w64

我尝试将_W64依次定义为空字符串和__w64,并且至少两次项目在64位配置中都编译好。

即表示_W64__w64看起来没用。我打算如何使用它们以及如何在64位项目中定义_W64

回答

2

答案是,你没有。这是32位编译器使用的编译器功能。最初的想法是,微软希望为即将到来的32-> 64位转换准备程序员。因此,32位编译器可以将某些类型定义标记为__w64。微软然后使用该能力来标记在Win64中会改变的typedef。

9

__w64用于标记在32位和64位环境中具有不同大小的类型。编译器可能会在您将一个maybe-64bit类型分配给一个32位类型时发出警告。

如果将MSDN: __w64视图切换为最新版本,则可以看到该关键字已被弃用。当您尝试使用/ Wp64选项进行编译时,VC9甚至会生成警告。