2013-08-24 2 views
0

Поскольку мне нужно извлечь значок из файла, но не первый значок, я не могу использовать функцию извлечения значка vb.net. Функция WIN32API, которая должна это делать, ожидает указатель на целочисленный массив.vb.net win32api указатель на целочисленный параметр массива

Как я могу предоставить этот тип в качестве параметра?

Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" _ 
(ByVal lpszFile As String, _ 
ByVal nIconIndex As Integer, _ 
ByRef phiconLarge As Integer, _ 
ByRef phiconSmall As Integer, _ 
ByVal nIcons As Long) As Integer 


    Dim icons As integer() 
    ExtractIconEx("%systemroot%/shell32.dll", 15, icons, 0, 5) 

Я взял гусак на System.Reflection.Pointer класса?/?, имен, но документация немногочисленны и менее разумно.

IntPtr не обеспечивает поддержку массивов afaikt

Ok ОГО Ганс мне удалось исправить подпись:

<Runtime.InteropServices.DllImport("shell32.dll", _ 
CharSet:=Runtime.InteropServicesCharSet.Auto)> _ 
Shared Function ExtractIconEx(ByVal szFileName As String, _ 
     ByVal nIconIndex As Integer, _ 
     ByRef phiconLarge() As IntPtr, _ 
     ByRef phiconSmall() As IntPtr, _ 
     ByVal nIcons As UInteger) As UInteger 
End Function 

... 

Dim icons(8) As IntPtr, smicons(8) As IntPtr 
    MsgBox(ExtractIconEx("%systemroot%/shell32.dll", 15, icons, smicons, 1)) 
    Try 
     MsgBox(icons.Count) 
    Catch ex As Exception 
     MsgBox(ex.Message & " by " & ex.Source) 

    End Try 
... 

Последующие вызовы всегда вызывают исключение (Value cannot be null). Я получаю возвращаемое значение 4294967295, что является максимальным 32-битным целым значением.

Любые идеи о том, как приручить эту функцию и заставить ее работать?

+1

http://pinvoke.net/default.aspx/shell32/ExtractIconEx.html –

ответ

2
ByRef phiconLarge() As IntPtr, _ 
    ByRef phiconSmall() As IntPtr, _ 

VB.NET объявление на этой странице есть ошибка, эти массивы должны быть переданы ByVal, не ByRef. Обратите внимание, как они получили это правильно в примере кода в нижней части страницы.

Я отредактировал страницу, чтобы исправить ошибку.

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