For some may be intressting to include a DLL in the Resource-Section. The routines will save the dll to the HDD (in the temp-folder), direct is impossible)
When my test are right, no additional memory is used by the resources after unload the resources (includebinary use memory, my routines should not permanent).
EDIT:CODE CHANGED!
Code: Select all
;Info: Simple Resource-Handling
Global RT_MyRes
RT_MyRes=@"MYRES"
XIncludeFile "API-FileHandle.pbi"
XIncludeFile "FilePlus.pbi"
XIncludeFile "System.pbi"
;IncludePack is needed!
;Include "API-FileHandle","FilePlus" and "System"
Structure ResourceHandle
hModul.l
hFindResource.l
hLoadResource.l
Len.l
Address.l
EndStructure
Procedure ResCatchImage(Nb,ResName$); - Load a Image. ResourceType must be RT_MyRes!
Result=#False
hModul=GetModuleHandle_(0)
FRes = FindResource_( hModul,ResName$,RT_MyRes)
If FRes
Lres= LoadResource_(hModul,FRes)
Adr = LockResource_(Lres)
Result=CatchImage(Nb,Adr)
FreeResource_(Lres)
EndIf
ProcedureReturn Result
EndProcedure
Procedure ResCatchSound(Nb,ResName$); - Load a Sound. ResourceType must be RT_MyRes!
Result=#False
hModul=GetModuleHandle_(0)
FRes = FindResource_( hModul,ResName$,RT_MyRes)
Debug ResName$+" "+Str(FRes)
If FRes
Lres= LoadResource_(hModul,FRes)
Adr = LockResource_(Lres)
Debug Adr
Result=CatchSound(Nb,Adr)
FreeResource_(Lres)
EndIf
ProcedureReturn Result
EndProcedure
Procedure ResCatchSprite(Nb,ResName$,Mode); - Load a Sound. ResourceType must be RT_MyRes!
Result=#False
hModul=GetModuleHandle_(0)
FRes = FindResource_( hModul,ResName$,RT_MyRes)
If FRes
Lres= LoadResource_(hModul,FRes)
Adr = LockResource_(Lres)
Result=CatchSprite(Nb,Adr,Mode)
FreeResource_(Lres)
EndIf
ProcedureReturn Result
EndProcedure
Procedure ResCatchLibrary(Nb,ResName$); - Open a included DLL. ResourceType must be RT_MyRes!
Result=#False
hModul=GetModuleHandle_(0)
FRes = FindResource_( hModul,ResName$,RT_MyRes)
If FRes
Lres= LoadResource_(hModul,FRes)
len = SizeofResource_(hModul,FRes)
Adr = LockResource_(Lres)
temp$=GetPath(#GetPath_Temp)+ResName$
If UCase(GetExtensionPart(temp$))<>"DLL"
temp$+".DLL"
EndIf
BSave(temp$,Adr,len)
FreeResource_(Lres)
Result=OpenLibrary(Nb,temp$)
EndIf
ProcedureReturn Result
EndProcedure
Procedure ResFreeLibrary(Nb,ResName$); - Close a included DLL
CloseLibrary(Nb)
temp$=GetPath(#GetPath_Temp)+ResName$
If UCase(GetExtensionPart(temp$))<>"DLL"
temp$+".DLL"
EndIf
DeleteFile(temp$)
EndProcedure
Procedure ResOpen(*Handle.ResourceHandle,ResName$,ResType); - Load a Resource and return a address
Result=#False
*Handle\hModul=GetModuleHandle_(0)
*Handle\hFindResource = FindResource_(*Handle\hModul,ResName$,ResType)
If *Handle\hFindResource
*Handle\hLoadResource = LoadResource_ (*Handle\hModul,*Handle\hFindResource)
*Handle\Len = SizeofResource_(*Handle\hModul,*Handle\hFindResource)
*Handle\Address = LockResource_ (*Handle\hLoadResource)
Result=*Handle\Address
EndIf
ProcedureReturn Result
EndProcedure
Procedure ResLen(*Handle.ResourceHandle); - Return the len of a Resource
ProcedureReturn *Handle\Len
EndProcedure
Procedure ResClose(*Handle.ResourceHandle); - Unload a Resource
If *Handle\hLoadResource
FreeResource_(*Handle\hLoadResource)
*Handle\hModul=0
*Handle\hFindResource=0
*Handle\hLoadResource=0
*Handle\Len=0
*Handle\Address=0
EndIf
EndProcedure
;Example
ResCatchLibrary(1,"TestDLL")
CallFunction(1,"TestAufruf","Mein Text")
ResFreeLibrary(1,"TestDLL")
Adr=ResOpen(Handle.ResourceHandle,"TestDLL",RT_MyRes)
If Adr
BSave("MyDLL.DLL",Adr,ResLen(Handle))
ResClose(Handle)
EndIf
Code: Select all
BMPSpielfeld MYRES "F:\quadromania\Spielfeld.jpg"
BMPKugel MYRES "F:\quadromania\Kugel.bmp"
BMPCursor MYRES "F:\quadromania\Cursor.bmp"
BMPCursor2 MYRES "F:\quadromania\Cursor2.bmp"
BMPGood MYRES "F:\quadromania\Good.bmp"
BMPTimeOut MYRES "F:\quadromania\Time Out.bmp"
WAVSetzen MYRES "F:\quadromania\Swip.wav"
WAVGood MYRES "F:\quadromania\Good.wav"
WAVTimeOut MYRES "F:\quadromania\lachen2.wav"
Buchstaben: MYRES "F:\quadromania\Buchstaben.bmp"
Ziffern: MYRES "F:\quadromania\Ziffern.bmp"