diff --git a/PortableExecutable/MenuHeader.cs b/PortableExecutable/MenuHeader.cs index 9a7b7fb..b58f17a 100644 --- a/PortableExecutable/MenuHeader.cs +++ b/PortableExecutable/MenuHeader.cs @@ -3,23 +3,10 @@ namespace SabreTools.Models.PortableExecutable { /// - /// Contains version information for the menu resource. The structure definition provided - /// here is for explanation only; it is not present in any standard header file. + /// Common base class for menu item types /// /// + /// [StructLayout(LayoutKind.Sequential)] - public sealed class MenuHeader - { - /// - /// The version number of the menu template. This member must be equal to zero to indicate - /// that this is an RT_MENU created with a standard menu template. - /// - public ushort Version; - - /// - /// The size of the menu template header. This value is zero for menus you create with a - /// standard menu template. - /// - public ushort HeaderSize; - } + public abstract class MenuHeader { } } diff --git a/PortableExecutable/MenuHeaderExtended.cs b/PortableExecutable/MenuHeaderExtended.cs index 9fbdc25..a0bc8fc 100644 --- a/PortableExecutable/MenuHeaderExtended.cs +++ b/PortableExecutable/MenuHeaderExtended.cs @@ -8,7 +8,7 @@ namespace SabreTools.Models.PortableExecutable /// /// [StructLayout(LayoutKind.Sequential)] - public sealed class MenuHeaderExtended + public sealed class MenuHeaderExtended : MenuHeader { /// /// The template version number. This member must be 1 for extended menu templates. diff --git a/PortableExecutable/MenuItem.cs b/PortableExecutable/MenuItem.cs index 847d5a5..74853e9 100644 --- a/PortableExecutable/MenuItem.cs +++ b/PortableExecutable/MenuItem.cs @@ -1,9 +1,12 @@ -namespace SabreTools.Models.PortableExecutable +using System.Runtime.InteropServices; + +namespace SabreTools.Models.PortableExecutable { /// /// Common base class for menu item types /// /// /// + [StructLayout(LayoutKind.Sequential)] public abstract class MenuItem { } } diff --git a/PortableExecutable/MenuResource.cs b/PortableExecutable/MenuResource.cs index cfa3083..9412a83 100644 --- a/PortableExecutable/MenuResource.cs +++ b/PortableExecutable/MenuResource.cs @@ -9,32 +9,14 @@ /// public sealed class MenuResource { - #region Menu header - /// /// Menu header structure /// public MenuHeader? MenuHeader { get; set; } - /// - /// Menu extended header structure - /// - public MenuHeaderExtended? ExtendedMenuHeader { get; set; } - - #endregion - - #region Menu items - /// /// Menu items /// public MenuItem?[]? MenuItems { get; set; } - - /// - /// Extended menu items - /// - public MenuItemExtended?[]? ExtendedMenuItems { get; set; } - - #endregion } } diff --git a/PortableExecutable/NormalMenuHeader.cs b/PortableExecutable/NormalMenuHeader.cs new file mode 100644 index 0000000..af7b8c4 --- /dev/null +++ b/PortableExecutable/NormalMenuHeader.cs @@ -0,0 +1,25 @@ +using System.Runtime.InteropServices; + +namespace SabreTools.Models.PortableExecutable +{ + /// + /// Contains version information for the menu resource. The structure definition provided + /// here is for explanation only; it is not present in any standard header file. + /// + /// + [StructLayout(LayoutKind.Sequential)] + public sealed class NormalMenuHeader: MenuHeader + { + /// + /// The version number of the menu template. This member must be equal to zero to indicate + /// that this is an RT_MENU created with a standard menu template. + /// + public ushort Version; + + /// + /// The size of the menu template header. This value is zero for menus you create with a + /// standard menu template. + /// + public ushort HeaderSize; + } +}