System.ArgumentException: дескриптор Win32, который был передан в Icon, недопустим или имеет неправильный тип

У меня есть код ниже, чтобы загрузить значок с помощью Shell32 DLL. Он отлично работает на моей машине. Но одна из систем в производственной среде получила исключение: "System.ArgumentException: дескриптор Win32, который был передан в Icon, недопустим или имеет неправильный тип". Есть идеи, почему мы получаем эту ошибку? Спасибо!

Public Function GetExecutableIcon() As Icon
    Dim large As IntPtr
    Dim small As IntPtr
    ExtractIconEx(Application.ExecutablePath, 0, large, small, 1)

    Return Icon.FromHandle(small)

End Function

<DllImport("Shell32")> _
Public Shared Function ExtractIconEx(ByVal sFile As String, ByVal iIndex As Integer, 
                 ByRef piLargeVersion As IntPtr, ByRef piSmallVersion As IntPtr, 
                 ByVal amountIcons As Integer) As Integer

End Function

2 ответа

Решение

Попробуй это:

<DllImport("Shell32")> _
Public Shared Function ExtractIconEx(ByVal sFile As String, ByVal iIndex As Integer, 
             ByRef piLargeVersion As IntPtr, ByRef piSmallVersion As IntPtr, 
             ByVal amountIcons As Integer) As Integer

Public Function GetExecutableIcon() As Icon
    Dim num As Integer = 10
    Dim large(num - 1) As IntPtr
    Dim small(num - 1) As IntPtr

    ExtractIconEx("C:\Windows\System32\Shell32.dll", 0, large(0), small(0), num)

    Return Icon.FromHandle(small(6)) 'change the index accordingly

End Function

Ваша декларация верна? http://www.pinvoke.net/default.aspx/shell32.ExtractIconEx показывает

<DllImport("shell32.dll", CharSet:=CharSet.Auto)> _
 Shared Function ExtractIconEx(ByVal szFileName As String, _
             ByVal nIconIndex As Integer, _
             ByVal phiconLarge() As IntPtr, _
             ByVal phiconSmall() As IntPtr, _
             ByVal nIcons As UInteger) As UInteger
 End Function
Другие вопросы по тегам