2016-07-11 3 views
1

У меня есть следующая проблема с моим кодом.Win32 дескриптор, который был передан значку, недействителен или неправильный тип

Win32 handle that was passed to Icon is not valid or is the wrong type 

Линия кодов являются следующие:

SHFILEINFO декларации

Private Structure SHFILEINFO 
    Public hIcon As IntPtr   ' : iconc 
    Public iIcon As Integer   ' : icondex 
    Public dwAttributes As Integer ' : SFGAO_ flags 
    _ 
    Public szDisplayName As String 
    _ 
    Public szTypeName As String 
End Structure 

SHGetFileInfo Декларация

Private Declare Auto Function SHGetFileInfo Lib "shell32.dll" _ 
     (ByVal pszPath As String, _ 
     ByVal dwFileAttributes As Integer, _ 
     ByRef psfi As SHFILEINFO, _ 
     ByVal cbFileInfo As Integer, _ 
     ByVal uFlags As Integer) As IntPtr 

Private Const SHGFI_ICON = &H100 
Private Const SHGFI_SMALLICON = &H1 
Private Const SHGFI_LARGEICON = &H0 ' Large icon 
Private Const MAX_PATH = 260 

S HGetFileInfo Использование

Private Sub AddImageToImageListBox(ByVal strFileName As String) 
    On Error GoTo errHandler 

    Dim shInfo As SHFILEINFO 
    shInfo = New SHFILEINFO() 

    shInfo.szDisplayName = New String(vbNullChar, MAX_PATH) 
    shInfo.szTypeName = New String(vbNullChar, 80) 

    Dim hIcon As IntPtr 
    hIcon = SHGetFileInfo(strFileName, 0, shInfo, Marshal.SizeOf(shInfo), SHGFI_ICON Or SHGFI_SMALLICON) 

    Dim MyIcon As Drawing.Bitmap 
    MyIcon = Drawing.Icon.FromHandle(shInfo.hIcon).ToBitmap 
    imgAttachment.AddImage(MyIcon) 
    ilstAttachments.Items.Add(strFileName.ToString(), imgAttachment.Images.Count - 1) 

    Exit Sub 
errHandler: 
    ErrMsg("AddImageToImageListBox (errHandler)") 
End Sub 

Продолжительность

Ниже приведены значения, которые пропускают в SHGetFileInfo.

strFileName = "Copy (223) of Uncollected Card - Multiple Pages.TIF" 
shInfo.dwAttributes = 0 
shInfo.hIcon = 0 
shInfo.iIcon = 0 
shInfo.szDisplayName = "" 
shInfo.szTypeName = "" 

Ошибка

Когда указанные значения выше передается в SHGetFileInfo, возвращается, таким образом, значение 0 делает Hicon = 0.

Когда он достигает

MyIcon = Drawing.Icon.FromHandle(shInfo.hIcon).ToBitmap 

произошла ошибка

Win32 handle that was passed to Icon is not valid or is the wrong type 

Можете ли вы, ребята, помочь мне определить, в чем проблема?

Спасибо

ответ

1

Попробуйте изменить SHFILEINFO и SHGetFileInfo к этому

Private Structure SHFILEINFO 
     Public hIcon As IntPtr   ' : iconc 
     Public iIcon As Integer   ' : icondex 
     Public dwAttributes As Integer ' : SFGAO_ flags 
     <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _ 
     Public szDisplayName As String 
     <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> 
     Public szTypeName As String 
    End Structure 

    Private Declare Ansi Function SHGetFileInfo Lib "shell32.dll" (ByVal pszPath As String, _ 
     ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFO, ByVal cbFileInfo As Integer, _ 
     ByVal uFlags As Integer) As IntPtr 

Кроме того, я потерял бы On Error Goto и использовать Try/Catch.

+0

Я попытался использовать ваш код, но та же ошибка все еще появилась. Что касается On Error GoTo, я не могу использовать метод Try/Catch, поскольку мы использовали пользовательский MessageBox для отображения ошибки и местоположения. –

+0

Он работал на моей машине. –

+0

Действительно? Я скопировал ваш код и заменил его, но на моем сайте произошла одна и та же проблема. Спасибо BTW. –

 Смежные вопросы

  • Нет связанных вопросов^_^