Использование двух полей short вместо uint для хранения HiWord/LoWord

Можно ли использовать два поля short вместо uint, чтобы самостоятельно не вычислять HiWord/LoWord?

Для примера, я использую SetWindowsHookEx (WH_MOUSE_LL), в колбеке LowLevelMouseProc я получаю структуру MSLLHOOKSTRUCT в этой структуре есть поле DWORD mouseData у которого старшее слово хранит определенное значение для некоторых сообщений, а младшее зарезервировано. Можно ли разделять его на 2 short?

Мое объявление структуры на C# выглядит так:

[StructLayout(LayoutKind.Sequential)]
public struct TagMSLLHOOKSTRUCT
{
    public TagPOINT pt;
    public short reserved;
    public short mouseData;
    public uint flags;
    public uint time;
    public UIntPtr dwExtraInfo;
}

[StructLayout(LayoutKind.Sequential)]
public struct TagPOINT
{
    public int x;
    public int y;
}

Это работает, но нет ли у этого подхода минусов/подводных камней? Можно ли так делать?

Если следовать документации MSLLHOOKSTRUCT должно быть так:

[StructLayout(LayoutKind.Sequential)]
public struct TagMSLLHOOKSTRUCT
{
    public TagPOINT pt;
    public uint mouseData;
    public uint flags;
    public uint time;
    public UIntPtr dwExtraInfo;
}

Ответы (0 шт):