Hor*_*ter 6 c++ debugging remote-debugging visual-studio-2010
调试在Visual Studio 2010(C++,非托管),什么是信息unused ???
还是unused 0
什么意思?我附上了两个截图,孩子是一个HWND
现有的窗口.
我也感到困惑的HWND
是,有时候显示为"未使用",有时显示为"0".当指针指向未分配的内存时,我会理解这种情况,但在我的特定情况下,窗口已经创建并且有效.
这可以追溯到九十年代早期,当时只有一个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文章.
归档时间: |
|
查看次数: |
3288 次 |
最近记录: |