/// <summary>
        /// Read the menu template.
        /// </summary>
        /// <param name="lpRes">Address in memory.</param>
        internal override IntPtr Read(IntPtr lpRes)
        {
            _header = (User32.MENUEXTEMPLATE) Marshal.PtrToStructure(
                lpRes, typeof(User32.MENUEXTEMPLATE));

            IntPtr lpMenuItem = ResourceUtil.Align(lpRes.ToInt64() 
                + Marshal.SizeOf(_header) 
                + _header.wOffset);

            return _menuItems.Read(lpMenuItem);
        }
        /// <summary>
        /// Read the menu template.
        /// </summary>
        /// <param name="lpRes">Address in memory.</param>
        internal override IntPtr Read(IntPtr lpRes)
        {
            _header = (User32.MENUEXTEMPLATE) Marshal.PtrToStructure(
                lpRes, typeof(User32.MENUEXTEMPLATE));

            IntPtr lpMenuItem = new IntPtr(lpRes.ToInt32()
                + _header.wOffset // offset from offset field
                + 4 // offset of the offset field
                );

            return _menuItems.Read(lpMenuItem);
        }