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;
+ }
+}