在 Visual Studio 2010(C++,非托管)中调试,信息是什么unused ???
或unused 0
应该是什么意思?我附上了两个屏幕截图,孩子是HWND
现有窗口的一个。
我也很困惑,HWND
有时显示为“未使用”,有时显示为“0”。当有一个指向未分配内存的指针时,我会理解这种情况,但在我的特殊情况下,窗口已经创建并且有效。
在 Visual Studio 2010(C++,非托管)中调试,信息是什么unused ???
或unused 0
应该是什么意思?我附上了两个屏幕截图,孩子是HWND
现有窗口的一个。
我也很困惑,HWND
有时显示为“未使用”,有时显示为“0”。当有一个指向未分配内存的指针时,我会理解这种情况,但在我的特殊情况下,窗口已经创建并且有效。
这可以追溯到九十年代初,当时只有一个 HANDLE 作为类型来声明任何 Windows 对象的句柄。这是一个错误工厂,程序员可以摸索代码,例如,在需要窗口句柄的地方传递一个字体句柄。所以后来添加了 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 宏汤确保当 STRICT 打开时,HFONT 永远不能用于预期 HWND 的地方,它会在结构类型上产生类型不匹配。
您现在可以看到“未使用”的来源。它实际上是未使用的,只有 Windows 可以创建句柄值。它在调试器中很有帮助,因为它可以让您查看句柄值,0 或 -1 肯定是有问题的迹象。
此 MSDN 文章中有关 STRICT 的更多信息。