Rubrik: COM/OLE/Registry/DLL · Sonstiges | VB-Versionen: VB5, VB6 | 10.09.04 |
![]() Auslagern von Bilddateien, wie JPG´s in DLL-Dateien und Auslesen dieser Bilder im Projekt | ||
Autor: ![]() | Bewertung: ![]() ![]() ![]() ![]() ![]() | Views: 17.620 |
www.ackeller.ch | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Wenn Sie ein Programm erstellen, welches viele der speicherfreundlichen JPG-Bilder enthält, gibt es eine Möglichkeit, diese in eine ActiveX-DLL auszulagern. Somit lässt sich die Dateigrösse der eigentliche EXE-Datei auf ein Minimum reduzieren.
1. Erstellen einer Resource-Datei
Zuerst erstellen wir eine Textdatei mit nachfolgendem Aufbau und speichern diese unter dem Namen Bilder.rc ab:
// JPG-Bilder 1000 JPG DISCARDABLE "Testbild.jpg"
Anschliessend kompilieren wir diese Datei mit dem VB-Resourcencompiler (rc.exe) und erhalten die ResourcendateiBilder.res
2. Erstellen der DLL
Nun erstellen wir ein neues ActiveX-DLL Projekt und fügen folgenden Code ein:
Option Explicit ' Benötigte API-Deklarationen Private Declare Function CreateStreamOnHGlobal Lib "ole32.dll" ( _ ByVal hGlobal As Long, _ ByVal fDeleteOnRelease As Long, _ lpIStream As IUnknown) As Long Private Declare Function OleLoadPicture Lib "oleaut32.dll" ( _ ByVal lpStream As IUnknown, _ ByVal lSize As Long, _ ByVal fRunmode As Long, _ riid As Any, _ lpIPicture As IPicture) As Long
' Bild aus RES-Datei laden und ' als StdPicture-Objekt zurückgeben Public Function LoadImageFromRES(ByVal nResID As Long, sType) As StdPicture Dim IID_IPicture(3) As Long Dim oPicture As IPicture Dim bImg() As Byte Dim nResult As Long Dim oStream As IUnknown Dim hGlobal As Long ' Bild als ByteArray aus RES-Datei laden bImg = LoadResData(nResID, sType) ' Array füllen um den KlassenID (CLSID) IID_IPICTURE ' zu simulieren IID_IPicture(0) = &H7BF80980 IID_IPicture(1) = &H101ABF32 IID_IPicture(2) = &HAA00BB8B IID_IPicture(3) = &HAB0C3000 ' Stream erstellen Call CreateStreamOnHGlobal(VarPtr(bImg(LBound(bImg))), 0, oStream) ' OLE IPicture-Objekt erstellen nResult = OleLoadPicture(oStream, 0, 0, IID_IPicture(0), oPicture) If nResult = 0 Then Set LoadImageFromRES = oPicture End If End Function
Wir nennen die Klasse clsBilder und fügen dem Projekt die Resourcendatei hinzu. Danach kompilieren wir das Projekt zu unserer Bilder.dll.
3. Auslesen der JGP-Bilder aus der DLL
Wir erstellen ein neues Standard-EXE Projekt und fügen eine Image-Box und einen CommandButton mit folgendem Code hinzu:
Dim objBild As Bilder.clsBilder ' Name der dll, Name der Klasse Set objBild = New Bilder.clsBilder Set image1.Picture = objBild.LoadImageFromRES(1000, "JPG") Set objBild = Nothing
Vergessen Sie nicht, zuerst einen Verweis auf die Bilder.dll (Menü Projekt - Verweise) zu setzten.
Auf diese Weise lassen sich die Bilder allesamt in eine DLL-Datei auslagern und bei Bedarf in der eigentlichen Anwendung anzeigen.