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.903 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. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |