Introduction
With this sample, you can use Bitmap stored on external file (DLL). Then you can use bitmaps from Windows system or you create your bitmap repository inside VB DLL. It's useful to create bitmap library without keep a lot of files on hard disk. On that case, anyone can erase the pictures.
Module Code
Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Type PicBmp
Size As Long
Type As Long
hBmp As Long
hPal As Long
Reserved As Long
End Type
Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _
(PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnHandle As Long, _
IPic As IPicture) As Long
Declare Function LoadBitmap Lib "user32" Alias "LoadBitmapA" _
(ByVal hInstance As Long, ByVal lpBitmapID As Long) As Long
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long
Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Long) As Long
Public Function LoadPictureDLL(sResourceFileName As String, _
ByVal lResourceId As Long) As Picture
Dim hInst As Long
Dim hBmp As Long
Dim Pic As PicBmp
Dim IPic As IPicture
Dim IID_IDispatch As GUID
Dim lRC As Long
hInst = LoadLibrary(sResourceFileName)
If hInst <> 0 Then
hBmp = LoadBitmap(hInst, lResourceId)
If hBmp <> 0 Then
IID_IDispatch.Data1 = &H20400
IID_IDispatch.Data4(0) = &HC0
IID_IDispatch.Data4(7) = &H46
Pic.Size = Len(Pic)
Pic.Type = vbPicTypeBitmap
Pic.hBmp = hBmp
Pic.hPal = 0
lRC = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
If lRC = 0 Then
Set LoadPictureDLL = IPic
Set IPic = Nothing
Else
Call DeleteObject(hBmp)
End If
End If
FreeLibrary (hInst)
hInst = 0
End If
End Function
Sample
The sample application has a better code sample. Download it to get more information.