gpt4 book ai didi

c++ - C++中的VS2010调试器, "unused=???"或 "unused=0"的含义

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:12 27 4
gpt4 key购买 nike

在 Visual Studio 2010(C++,非托管)中调试,信息 unused ???unused 0 应该是什么意思?我附上了两个屏幕截图, child 是现有窗口的 HWND

我也对 HWND 有时显示为“未使用”,有时显示为“0”这一事实感到困惑。当有一个指向未分配内存的指针时,我会理解这种情况,但在我的特定情况下,窗口已经创建并且有效。

VS2010 unused=???

VS2010 unused=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 macro soup 确保在打开 STRICT 时 HFONT 永远不会用在需要 HWND 的地方,它会在结构类型上产生类型不匹配。

您现在可以看到“未使用”的来源。它实际上是未使用的,只有 Windows 可以创建句柄值。它在调试器中很有用,因为它可以让您查看句柄值,其中 0 或 -1 肯定是有问题的标志。

有关 STRICT 的更多信息,请参阅 this MSDN article .

关于c++ - C++中的VS2010调试器, "unused=???"或 "unused=0"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11204157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com