14

私は、ポインタを通常「NULL」と比較し、整数を「0」と比較する必要があるという背景から来ています。

私はWindowsハンドルを純粋な意味での「ポインター」(「ハンドル」)であるとは認識していなかったので、「NULL」ではなく0と比較する習慣がありました。

明らかに、それらは最近ポインターとして内部的に実装されていますが、私は個人的に、それらが本質的にポインターであるという理由ではなく、単に何らかの型安全性を獲得するためのものであると考えています。

とにかく、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 に答える