0

最初のアイコンではなく、ファイルからアイコンを抽出する必要があるため、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)

class?/namespace?をざっと見てみましたSystem.Reflection.Pointerが、ドキュメントはまばらであまり意味がありません。

IntPtr配列のサポートを提供していません

わかりましたハンスへの送信、署名を次のように修正できました。

<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 ビット整数値であるの戻り値を取得します。

この機能を飼いならして機能させる方法はありますか?

4

1 に答える 1