Использование двух полей 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;
}