Как используя ifdef узнать, что объявлен тип DWORD_PTR?
Memsize-типы DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR и ULONG_PTR предназначены для поддержки 64-битного кода и способны безопасно хранить в себе указатель в независимости от разрядности платформы. Однако в старых версиях Windows Platform SDK данные типы могут отсутствовать. Наилучшим решением данной проблемы будет обновление SDK до последней версии, но если это по какой-то причине невозможно, то данные типы можно объявить самостоятельно.
В связи с тем, что данные типы объявлены с помощью спецификатора typedef, нет единого надёжного способа на этапе препроцессинга с помощью директивы #ifdef определить их присутствие в используемой версии SDK. Однако, максимальное значение для этих типов определено через MAXULONG_PTR в файле basetsd.h, поэтому можно поступить так:
#if !defined(MAXULONG_PTR)
typedef DWORD DWORD_PTR;
#endif
Библиографический список
- Обсуждение на сайте Stackoverflow.com. "How to detect if the Windows DWORD_PTR type is supported, using an ifdef?"
- MSDN Library. error C2065: 'DWORD_PTR' : undeclared identifier.
0