Mit nachfolgender Klasse lässt sich ein Bild aus einer externen DLL-Datei anhand der Resourcen-ID auslesen: egal, ob BMP oder auch JPG. Imports System.Runtime.InteropServices Imports System.IO Public Class ImageLoader ' API-Deklarationen <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function FindResource(ByVal hhMod As IntPtr, _ ByVal lpID As Integer, ByVal lpType As String) As IntPtr End Function <DllImport("kernel32.dll", SetLastError:=True)> _ Private Shared Function LoadResource(ByVal hhMod As IntPtr, _ ByVal hResInfo As IntPtr) As IntPtr End Function <DllImport("kernel32.dll", SetLastError:=True)> _ Private Shared Function LockResource(ByVal hResData As IntPtr) As IntPtr End Function <DllImport("kernel32.dll", SetLastError:=True)> _ Private Shared Function SizeofResource(ByVal hhMod As IntPtr, _ ByVal hResInfo As IntPtr) As Integer End Function <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function LoadLibrary(ByVal lpFileName As String) As IntPtr End Function <DllImport("kernel32.dll", SetLastError:=True)> _ Private Shared Function FreeLibrary(ByVal hModule As IntPtr) As Boolean End Function ' unsere Funktion, die das Bild anhand der Resource-ID ermittelt Public Shared Function GetImageFromResource(ByVal resourceId As Integer, _ ByVal moduleName As String) As Image Dim hModule As IntPtr = LoadLibrary(moduleName) If hModule = IntPtr.Zero Then Return Nothing Dim resource As IntPtr = FindResource(hModule, resourceId, "IMAGE") If resource = IntPtr.Zero Then Return Nothing Dim rsrcid As IntPtr = LoadResource(hModule, resource) If rsrcid = IntPtr.Zero Then Return Nothing Dim memory As IntPtr = LockResource(rsrcid) If memory = IntPtr.Zero Then Return Nothing Dim size As Integer = SizeofResource(hModule, resource) Dim bytes(size - 1) As Byte Marshal.Copy(memory, bytes, 0, size) Dim memStream As New MemoryStream(bytes) FreeLibrary(hModule) Return Image.FromStream(memStream) End Function End Class Beispielaufruf: Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click PictureBox1.Image = ImageLoader.GetImageFromResource(5031, "imageres.dll") End Sub Dieser Tipp wurde bereits 11.933 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevCoolbar 3.0 Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |