最初のアイコンではなく、ファイルからアイコンを抽出する必要があるため、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 ビット整数値であるの戻り値を取得します。
この機能を飼いならして機能させる方法はありますか?