在Visual Studio 2010中调试(C ++,非托管),unused ???
或unused 0
应该是什么意思?我附上了两个截图,child是现有窗口的HWND
。
我也感到困惑的是,HWND
有时显示为“未使用”,有时显示为“0”。当指针指向未分配的内存时,我会理解这种情况,但在我的特定情况下,窗口已经创建并且有效。
答案 0 :(得分: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
使用示例:
DECLARE_HANDLE(HWND);
struct macro soup确保在STRICT打开时,在预期HWND的地方永远不能使用HFONT,它会在结构类型上产生类型不匹配。
您现在可以看到“未使用”的来源。它实际上是未使用的,只有Windows可以创建句柄值。它在调试器中很有用,因为它可以让你查看句柄值,0或-1是一个确定的麻烦迹象。
更多关于this MSDN article中的STRICT。