Это - Строка 519 из WinNT.h
(Версия сборки: 0091)
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
Почему нам нужен указатель на структуру с единственным международным участником со странным названным именем unused
?
И мы должны будем когда-либо использовать строку кода как этот?
HINSTANCE hInstance = new HINSTANCE__;
В целом объявляя различные типы данных с теми же структурами, не имеет смысла мне. Какова идея позади этого?
DECLARE_HANDLE(HRGN);
DECLARE_HANDLE(HRSRC);
DECLARE_HANDLE(HSPRITE);
DECLARE_HANDLE(HLSURF);
DECLARE_HANDLE(HSTR);
DECLARE_HANDLE(HTASK);
DECLARE_HANDLE(HWINSTA);
DECLARE_HANDLE(HKL);
Дело в том, что разные дескрипторы должны иметь разные типы, так что, например, HINSTANCE нельзя назначить HANDLE. Если бы все они были определены как «void *», тогда есть классы ошибок, которые компилятор не смог бы обнаружить.
И понадобится ли нам когда-нибудь использовать строку кода, подобную этой?
HINSTANCE hInstance = new HINSTANCE__;
Обычно вы используете значение HINSTANCE
, возвращаемое системным вызовом Windows; я никогда не видел кода, выполняющего подобную строку.