Смотря на заголовки COM, очень часто замечаю что у большинства enum присутствует значение FORCE_DWORD = 0xffffffff.
Вопрос, это было сделано для того что бы компилятор понимал что у данного enum тип unsigned int? Или же все таки это поле где-то в недрах используется?
Один из enum:
/// <summary>
/// Describes the sequence of dashes and gaps in a stroke.
/// </summary>
typedef enum D2D1_DASH_STYLE
{
D2D1_DASH_STYLE_SOLID = 0,
D2D1_DASH_STYLE_DASH = 1,
D2D1_DASH_STYLE_DOT = 2,
D2D1_DASH_STYLE_DASH_DOT = 3,
D2D1_DASH_STYLE_DASH_DOT_DOT = 4,
D2D1_DASH_STYLE_CUSTOM = 5,
D2D1_DASH_STYLE_FORCE_DWORD = 0xffffffff
} D2D1_DASH_STYLE;
И при определении такого enum в c# мне стоит откинуть данное значение и просто указать так? :
/// <summary>
/// Describes the sequence of dashes and gaps in a stroke.
/// </summary>
public enum D2D1DashStyle : uint
{
Solid = 0,
Dash = 1,
Dot = 2,
DashDot = 3,
DashDotDot = 4,
Custom = 5
}
Не уверен в правильности трактовки, но, изыскания показывают следующее:
Предоставленный префикс должен помочь гарантировать, что параметр anme уникален в своем пространстве имен: https://github.com/loganjones/nTA-Total-Annihilation-Clone/blob/d7d0e4d33f1d452d17cf2fed2b2bcb7f6d7d4d14/nTA/Source/std_Defs.h
#define FORCE_DWORD ( PREFIX ) PREFIX ## _ FORCE_DWORD = ( 0x7fffffff )
Принудительно привести enum к 32-битному размеру: https://github.com/SpyderTL/OZone/blob/64adf66e90aa27bd8ed0430290bd68ff8f7467d3/OZone/Documentation/DirectX/D3d%20Shader.txt
FORCE_DWORD = 0x7fffffff
Судя по коду, составляет индекс массива, финальную ячейку: https://github.com/cooperyuan/attila/blob/29a0ceab793b566c09cf81af26263e4855842c7a/src/trace/D3DStadistics/D3D9TextureStats.cpp
poolTypeU[FORCE_DWORD] = 0;
И судя по поиску, *FORCE_DWORD относится к OpenGL и D3D9 API, так что применяется на их усмотрение, и явно не входит не в один стандарт или спецификацию.
Продвижение своими сайтами как стратегия роста и независимости