Ответ 1
Сравните его с документированным значением возврата ошибки. Это означает, что вы должны сравнивать его с INVALID_HANDLE
, 0, -1, отличным от нуля или <=32
(я не шучу с последним, см. ShellExecute).
Я исхожу из фона, в котором указатели обычно следует сравнивать с "NULL" и целыми числами с "0".
Поскольку я не воспринимал дескрипторы Windows как "указатели" в чистом смысле (будучи "ручками" ), я привык сравнивать их с 0, а не с "NULL".
Очевидно, что они реализованы внутренне как указатели в настоящее время, но я лично считаю, что это просто для получения некоторой безопасности типа, а не потому, что они являются внутренне указателями.
В любом случае, я просто заметил, что помощь для CreateIC, которая возвращает HDC, утверждает, что если функция не работает, она возвращает "NULL".
Теперь я запутался - и мне интересно, что считают другие люди - правильнее ли считать дескриптор Windows указателем (и, следовательно, проверить его против "NULL" или "nullptr" для современных компиляторов) или он должен считаться целым числом?
Сравните его с документированным значением возврата ошибки. Это означает, что вы должны сравнивать его с INVALID_HANDLE
, 0, -1, отличным от нуля или <=32
(я не шучу с последним, см. ShellExecute).
Чтобы ответить на ваш вопрос: тип HANDLE
объявлен в winnt.h как
typedef PVOID HANDLE;
Следовательно, технически это указатель.
Однако я бы просто использовал все, что задокументировано; если в документации указано, что возвращается NULL
, я использую именно это, если только доказательства не показывают, что документация неверна.
Я даже не думаю о указателях и целых числах. NULL
- это просто непрозрачное значение (в этой ситуации), а HANDLE
- непрозрачный тип для меня, и я не ищу, чтобы посмотреть, что это такое #define
'd.
Я думаю, что INVALID_HANDLE_VALUE
обычно является правильным "недопустимым" значением для дескрипторов Windows... и это оценивается как -1
.