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 12.023 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! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Tipp des Monats Juni 2024 Microsys Kramer Mausrad im Formular abschalten (Access) Deaktiviert das Mausrad in Access-Formularen. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |