用C++编写的VS2010调试器,意思是"unused = ???" 或"unused = 0"

Hor*_*ter 6 c++ debugging remote-debugging visual-studio-2010

调试在Visual Studio 2010(C++,非托管),什么是信息unused ???还是unused 0什么意思?我附上了两个截图,孩子是一个HWND现有的窗口.

我也感到困惑的HWND是,有时候显示为"未使用",有时显示为"0".当指针指向未分配的内存时,我会理解这种情况,但在我的特定情况下,窗口已经创建并且有效.

VS2010未使用= ???

VS2010未使用= 0

Han*_*ant 6

这可以追溯到九十年代早期,当时只有一个HANDLE作为声明任何Windows对象句柄的类型.这是一个bug工厂,程序员可以摸索代码,比如说,传递一个需要窗口句柄的字体句柄.因此稍后添加了STRICT宏,它重新声明了句柄类型,因此混合会产生编译器错误.在winnt.h中看起来像这样,为内容编辑:

#ifdef STRICT
   typedef void *HANDLE;
   #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#else
   typedef PVOID HANDLE;
   #define DECLARE_HANDLE(name) typedef HANDLE name
#endif
Run Code Online (Sandbox Code Playgroud)

用法示例:

DECLARE_HANDLE(HWND);
Run Code Online (Sandbox Code Playgroud)

结构宏汤确保在STRICT打开时,在预期HWND的地方永远不会使用HFONT,它会在结构类型上产生类型不匹配.

您现在可以看到"未使用"的来源.它实际上是未使用的,只有Windows可以创建句柄值.它在调试器中很有用,因为它可以让你查看句柄值,0或-1是一个确定的麻烦迹象.

有关STRICT的更多信息,请参阅此MSDN文章.