Загрузка иконок с Shell32.dll:Дескриптор Win32 недопустим или имеет неправильный тип
Вопрос
Я получаю несколько иконок из 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 в любом случае.Рэймонд Чен объясняет почему, хотя я не могу найти статью.