Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Выдаёт отрицательный индекс иконки


Автор: N1ko 29.11.2009, 23:14
Почему то выдаёт отрицательные значения индекса иконки в системном ImageList. Почему так происходит? Если допустим взять папку и поставить на неё ту же самую иконку, выдаёт корректный результат. Помогите плиз. 
   
Код

    public const uint SHGFI_ICONLOCATION = 0x000001000;     // get icon location

        [StructLayout(LayoutKind.Sequential)]
        private struct ShellFileInfoStructure
        {
            public IntPtr hIcon;
            public IntPtr iIcon;
            public uint dwAttributes;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
            public string szDisplayName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
            public string szTypeName;
        };

        [DllImport("shell32.dll")]
        private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, out ShellFileInfoStructure psfi, uint cbSizeFileInfo, uint uFlags);

        public void GetIndex(string Way)
        {
            ShellFileInfoStructure rr = new ShellFileInfoStructure();
            SHGetFileInfo(Way, 0, out rr, (uint)Marshal.SizeOf(rr), SHGFI_ICONLOCATION);
            MessageBox.Show(rr.iIcon.ToString());
            MessageBox.Show(rr.szDisplayName);

        }



Автор: GremlinProg 29.11.2009, 23:43
Цитата(N1ko @  30.11.2009,  01:14 Найти цитируемый пост)
public IntPtr iIcon

int?

Автор: N1ko 30.11.2009, 04:27
Можно и инт В данном случае роли не играет

Автор: GremlinProg 30.11.2009, 11:12
Цитата(N1ko @  30.11.2009,  06:27 Найти цитируемый пост)
Можно и инт В данном случае роли не играет

чтобы узнать, какую роль он играет, нужно знать, на какую платформу компилируется пример,
т.к. поднятый старший бит в dwAttributes, без учета int даст как раз отрицательный индекс на 64-битной машине,
либо при ее эмуляции, с разрешением IntPtr в 64, а не в 32 бита

если не знаешь точно, просто поставь int

Автор: N1ko 14.12.2009, 16:15
Со значением int та же самая ситуация.Самое странное что выдаёт отрицательные значения только для иконок, которые по дефолту были выставлены при установке винды. ТО есть мои документы, моя музыка, мои рисунки. А если же поставить такую же иконку на какую нить папку(изменить средставми винды иконку), то выдаёт нормальный результат.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)