;/ PureBasic 3.94 / Droopy 22/09/06
;/ Met à jour des resources dans un exe
;/ Prérequis : Ne fonctionne qu'avec un fichier intégrant déjà des ressources.
Procedure InsertResource(File.s,Resource.s,ResourceName.s,DeleteExistingResources )
Size=FileSize(Resource)
If Size>0
*InsertResourcePtr=AllocateMemory(Size)
No=ReadFile(#PB_Any,Resource)
ReadData(*InsertResourcePtr,Size)
CloseFile(No)
hUpdateRes = BeginUpdateResource_(File,DeleteExistingResources)
If hUpdateRes
If UpdateResource_(hUpdateRes,#RT_RCDATA,ResourceName,#LANG_NEUTRAL,*InsertResourcePtr,Size)
Ret=1
EndIf
EndUpdateResource_(hUpdateRes, #False)
FreeMemory(*InsertResourcePtr)
ProcedureReturn Ret
EndIf
EndIf
EndProcedure
ma question va paraitre peut être idiote ! mais dans ce cas là qu'est ce qu'on appel resource ? c'est une image ou info qui est inclu dans le code sous forme data ? je nbe vois pas trop comment ça marche.
ce sont des données inclues dans ton exe qui ne se chargent pas au lancement de ton programme (contrairement à includebinary)
les ressources peuvent avoir un type particulier (chaines, icones, menus etc) et peuvent même se décliner en plusieurs langues.
elles sont chargées en mémoire quand on décide de les charger...
Dr. Dri a écrit :ce sont des données inclues dans ton exe qui ne se chargent pas au lancement de ton programme (contrairement à includebinary)
les ressources peuvent avoir un type particulier (chaines, icones, menus etc) et peuvent même se décliner en plusieurs langues.
elles sont chargées en mémoire quand on décide de les charger...
Dri
Merci beaucoup pour ces précisions je suppose que pour les exploiter dans l'executable il doit y avoir d'autre fonction..c'est interessant ça.
;{ Resource (Start)
;/ Droopy
; PureBasic 3.94 25/11/05
; Create a File with RC Extension And include it as RC_DATA Resource Type
; Path can be absolute Or relative
; Exemple :
; REG RCData "C:\WINDOWS\REGEDIT.EXE"
; SON RCData "son.wav"
; Image RCData "image.bmp"
;/ SaveResourceAs(Name.s,File.s) Save the resource as a file
;/ GetResourcePointer(Name.s) is usefull with PureBasic CatchXXX functions (CatchImage / CatchSound ... )
ProcedureDLL SaveResourceAs(Name.s,File.s)
; (Use GetModuleHandle_ if you want to specify another file)
HandleResource= FindResource_(0,@Name,#RT_RCDATA)
If HandleResource
HandleGlobalMemoryBlock=LoadResource_(0,HandleResource)
PointerFirstByteOfTheResource=LockResource_(HandleGlobalMemoryBlock)
; Get size of the resource
Size= SizeofResource_(handle,HandleResource)
; Save the file
FileId=OpenFile(#PB_Any,File)
If FileId
WriteData(HandleGlobalMemoryBlock,Size)
CloseFile(FileId)
EndIf
; Test if the file is written
If FileSize(File)=Size
ProcedureReturn 1
EndIf
EndIf
EndProcedure
ProcedureDLL GetResourcePointer(Name.s)
; (Use GetModuleHandle_ if you want to specify another file)
HandleResource= FindResource_(0,@Name,#RT_RCDATA)
If HandleResource
HandleGlobalMemoryBlock=LoadResource_(0,HandleResource)
PointerFirstByteOfTheResource=LockResource_(HandleGlobalMemoryBlock)
ProcedureReturn HandleGlobalMemoryBlock
EndIf
EndProcedure
ProcedureDLL GetResourceSize(Name.s)
; (Use GetModuleHandle_ if you want to specify another file)
HandleResource= FindResource_(0,@Name,#RT_RCDATA)
If HandleResource
HandleGlobalMemoryBlock=LoadResource_(0,HandleResource)
PointerFirstByteOfTheResource=LockResource_(HandleGlobalMemoryBlock)
; Return the size of the resource
Size= SizeofResource_(Handle,HandleResource)
ProcedureReturn Size
EndIf
EndProcedure
;/ Test
; CatchImage(0,GetResourcePointer("IMAGE"))
; OpenWindow(0,0,0,240,240,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ImageGadget")
; CreateGadgetList(WindowID(0))
; ImageGadget(0,20,20,200,200,UseImage(0),#PB_Image_Border)
; SaveResourceAs("REG","d:\Out.exe")
; InitSound()
; CatchSound(0,GetResourcePointer("SON"))
; PlaySound(0)
; Delay(2000)
;} Resource (End)