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.649 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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 sevGraph (VB/VBA) ![]() Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
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. |