Page 1 sur 1
Conversion d'un bou de code VB en PB
Publié : dim. 25/oct./2009 13:46
par GallyHC
Bonjour tout le monde,
J'aimerais convertir un bout de code de VB à PB mais je ne comprends pas tout

la structure, les constantes, ect... ok mais c la partie de chargement qui me pose problème
Public Type ZIPFileHeader
Signature As Long
Version As Integer
GenePurpFlag As Integer
Methode As Integer
LastFileTime As Integer
LastFileData As Integer
Crc32 As Long
SizeComp As Long
SizeUnComp As Long
FileNameLen As Integer
ExtraLen As Integer
End Type
Public Const LOCSIG As Long = &H4034B50
Private LOCHdr As ZIPFileHeader
Jusque la tout est OK.
Code : Tout sélectionner
Open vFileName For Binary Access Read Lock Write As #f
Get #f, , LOCHdr
If LOCHdr.Signature = LOCSIG Then
End If
La partie qui me pose problème.
Cordialement,
GallyHC
Re: Conversion d'un bou de code VB en PB
Publié : dim. 25/oct./2009 14:58
par flaith
Vite fait, peut-être que cela ira :
Code : Tout sélectionner
Structure sZIPFileHeader
Signature.l
Version.i
GenePurpFlag.i
Methode.i
LastFileTime.i
LastFileData.i
Crc32.l
SizeComp.l
SizeUnComp.l
FileNameLen.i
ExtraLen.i
EndStructure
#FileToRead = 0
#LOCSIG = $04034B50
filename$ = "test.bin"
Global LOCHdr.sZIPFileHeader
If OpenFile(#FileToRead,filename$)
ReadData(#FileToRead,LOCHdr,SizeOf(sZIPFileHeader))
If LOCHdr\Signature = #LOCSIG
MessageRequester("","Found signature")
CloseFile(#FileToRead)
EndIf
EndIf

Re: Conversion d'un bou de code VB en PB
Publié : dim. 25/oct./2009 16:03
par Kwai chang caine
J'vais encore me coucher moins bete ce soir....
C'est quoi une signature dans un ZIP ????

Re: Conversion d'un bou de code VB en PB
Publié : dim. 25/oct./2009 18:45
par GallyHC
Bonjour,
La signature est juste un tag qui permet de vérifier si cela est bien un zip ou pas...
Merci flaith c'est bien ce que je recherche a faire. En fait je vais faire un module qui lit et extrait les zip pour que e soit multi-plate-forme.
encore une question et "Get #f, i, Temp" je fais comment?
Cordialement,
GallyHC
PS: si ce projet interresse quelqu'un pour m'aide pas de prob

Re: Conversion d'un bou de code VB en PB
Publié : dim. 25/oct./2009 20:35
par flaith
GallyHC a écrit :..."Get #f, i, Temp" je fais comment?...
Je ne connais pas VB, mais cette fonction "get" permet vraisemblablement de rechercher dans le fichier "#f", à la position "i", une valeur à mettre dans "temp" qui doit être de type Long ou Integer probablement
En Purebasic, cela se traduirait par :
Code : Tout sélectionner
Global.i i
Global *temp
i = 24
FileSeek(#FileToRead, i)
*temp = AllocateMemory(SizeOf(i))
ReadData(#FileToRead, *temp, SizeOf(i))
Debug RSet(Hex(PeekI(*temp)),SizeOf(i)*2,"0")

Re: Conversion d'un bou de code VB en PB
Publié : dim. 25/oct./2009 22:08
par GallyHC
Bonjour,
Vraiment merci sa m'aide beaucoup

je me permettrais de demande votre aide en cas de besoin. dans tout les cas je ferais comme dab je partagerais ce que j'aurais fait
Amitié,
GallyHC
Re: Conversion d'un bou de code VB en PB
Publié : lun. 26/oct./2009 9:13
par Kwai chang caine
Merci pour l'info

Re: Conversion d'un bou de code VB en PB
Publié : jeu. 29/oct./2009 12:52
par GallyHC
Bonjour,
J'ai encore un problème, maintenant il faudrait que je puisse ouvrir un fichier et prendre une partie (n’ importe où par exemple 1+100) et de prendre x bits pour le mettre dans une variable.
Merci d'avance de votre aide,
Cordialement,
GallyHC
Re: Conversion d'un bou de code VB en PB
Publié : jeu. 29/oct./2009 13:29
par djes
Regarde l'exemple de Fileseek()
Code : Tout sélectionner
file$ = OpenFileRequester("Select a file","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
If file$
If ReadFile(0, file$)
length = Lof(0) ; Lit la taille en octets du fichier
FileSeek(0, length - 10) ; place le pointeur 10 caractères avant la fin du fichier
Debug "Position: " + Str(Loc(0)) ; Affiche la position du pointeur
*MemoryID = AllocateMemory(10) ; alloue un bloc mémoire pour 10 octets
If *MemoryID
bytes = ReadData(0, *MemoryID, 10) ; Lit les 10 derniers caractères du fichier
Debug PeekS(*MemoryID)
EndIf
CloseFile(0)
EndIf
EndIf
Re: Conversion d'un bou de code VB en PB
Publié : jeu. 29/oct./2009 13:51
par flaith
ou ca :
Code : Tout sélectionner
#FileToRead = 10
Global EndPos.l
Global *Buffer
Procedure.l ptr_FileSeek(seekpos.l, length.l)
If seekpos+length >= EndPos
MessageRequester("Erreur","Dépassement de la position recherchée !")
End
Else
FileSeek(#FileToRead, seekpos)
*buffer = AllocateMemory(length)
If *buffer
If ReadData(#FileToRead, *buffer, length) = length
ProcedureReturn *Buffer
Else
MessageRequester("Erreur","Problème de lecture des données tronquée !!!")
End
EndIf
Else
MessageRequester("Erreur","Problème d'allocation de la mémoire !!!")
End
EndIf
EndIf
EndProcedure
Procedure ExtractData(filename.s, seekpos.l, length.l)
Protected *adresse
Protected debut.l, val.l
If ReadFile(#FileToRead, filename)
EndPos = Lof(#FileToRead)
*adresse = ptr_FileSeek(seekpos.l, length.l)
debut = 0
While debut < length
; on peut aussi créer une liste pour mettre chaque valeur
val = PeekL(*adresse + debut)
Debug RSet(Hex(seekpos+debut),8,"0")+":"+RSet(Hex(val), 2, "0") + " - " + Chr(val)
debut + 1
Wend
CloseFile(#FileToRead)
Else
MessageRequester("Erreur fichier",filename+" non trouvé !!!")
End
EndIf
EndProcedure
ExtractData("C:\Nico\___GEWAD___\GeWAD.exe",$c70,20)

Re: Conversion d'un bou de code VB en PB
Publié : jeu. 29/oct./2009 16:41
par GallyHC
Bonjour et merci pour vos exemple,
J'ai fais le code ci-dessous :
Code : Tout sélectionner
Procedure Extract_Level_8(filenums.l)
;
Define lfllen.l
Define *temp.l
If ReadFile(#READZIP, szipfilenme)
lfllen = Lof(#READZIP)
FileSeek(#READZIP, 1 + sfileinf(filenums)\DataOffset)
Debug "Position: " + Str(Loc(0))
Debug "Taille: " + Str(sfileinf(filenums)\SizeComp)
*temp = AllocateMemory(sfileinf(filenums)\SizeComp)
ReadData(#READZIP, *temp, sfileinf(filenums)\SizeComp)
If PeekI(temp) = #CENSIG
Debug "Pass"
EndIf
CloseFile(#READZIP)
EndIf
EndProcedure
en gros sa ressemble a celui de Djes, avec comme valeur
filenums)\DataOffset = 145862
sfileinf(filenums)\SizeComp = 356
Mon problème est que a la ligne "*temp = AllocateMemory(sfileinf(filenums)\SizeComp)" j'ai une erreur, "Invalid memory access (read error at address 1634561908)" et je ne comprend pas pourquoi?
Cordialement,
GallyHC
Re: Conversion d'un bou de code VB en PB
Publié : jeu. 29/oct./2009 17:12
par djes
Je vois beaucoup de sources d'erreurs possibles. Il faut éviter de déclarer les .l maintenant (le .i les remplace, mais tant qu'à faire, autant ne rien mettre); apparemment tu utilises beaucoup les variables globales; enfin le szipfilenme me semble suspect. Dans l'état actuel des choses, il vaudrait mieux appeler le debugger et faire du pas à pas jusqu'à trouver où se situe l'erreur.