14

我来自一个背景,通常应该将指针与“NULL”进行比较,将整数与“0”进行比较。

由于我没有将 Windows 句柄视为纯粹意义上的“指针”(即“句柄”),因此我养成了将它们与 0 而不是“NULL”进行比较的习惯。

显然,它们现在在内部作为指针实现,但我个人认为这仅仅是为了获得一些类型安全,而不是因为它们本质上是指针。

无论如何,我只是注意到返回 HDC 的 CreateIC 的帮助指出,如果函数失败,则返回“NULL”。

现在我很困惑——我想知道其他人是怎么想的——将 Windows 句柄视为指针是否更正确(因此对于现代编译器来说,将其与“NULL”或“nullptr”进行比较)还是应该考虑是一个整数?

4

3 回答 3

8

将其与记录的错误返回值进行比较。这意味着您应该将它与INVALID_HANDLE、0、-1、非零或<=32(我不是在和最后一个开玩笑,请参阅 ShellExecute)进行比较。

于 2010-10-11T11:10:25.257 回答
3

回答您的问题:HANDLE类型在 winnt.h 中声明为

typedef PVOID HANDLE;

因此,从技术上讲,它是一个指针。

但是,我只会使用记录在案的任何内容;如果文档说明NULL返回,我会使用它,除非有证据表明文档不正确。

我什至不考虑指针与整数。NULL只是一个不透明的值(在这种情况下),HANDLE对我来说是一个不透明的类型,我不会费心去查找它是什么#define

于 2010-10-11T10:58:38.157 回答
1

我认为INVALID_HANDLE_VALUE通常是 Windows 句柄的正确“无效”值......并且计算结果为-1.

于 2010-10-11T10:57:32.103 回答