Загрузка иконок с Shell32.dll:Дескриптор Win32 недопустим или имеет неправильный тип

StackOverflow https://stackoverflow.com/questions/949196

  •  09-09-2019
  •  | 
  •  

Вопрос

Я получаю несколько иконок из Shell32.dll .Хотя некоторые иконки, похоже, недоступны, и я не могу понять почему.

Я получаю значок, загружая библиотеку, вызывая:

[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string Library);

а затем получить значок, позвонив:

    [DllImport("User32.dll")]
public static extern IntPtr LoadImage(IntPtr ptr, int intId, uint intType, int iconWidth,  int iconHeight, int loadIcon);

Я отправляю индекс значка значка, который я получаю, который отлично работает для icpons, таких как значок открытой папки (индекс 5) и значок входа в систему (индекс 45), но когда я пытаюсь получить значки с индексом (71, 73, 127 и т.д.и т.д.) Я получаю следующее исключение:Дескриптор Win32 , который был передан Icon , недопустим или имеет неправильный тип

Мне было интересно, знает ли кто-нибудь, почему это происходит?и почему некоторые значки доступны, а другие отображаются недоступно.

Спасибо

Это было полезно?

Решение

почему некоторые значки доступны, а другие нет.

Потому что иконки не являются частью публичного контракта от Shell32.dll.

Вы не должны полагаться на загрузку значков из Shell32.dll в любом случае.Рэймонд Чен объясняет почему, хотя я не могу найти статью.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top