[Delphi] Bug?

Pagina: 1
Acties:
  • 63 views sinds 30-01-2008

  • falcon4ever
  • Registratie: Oktober 2001
  • Laatst online: 25-08 23:36
Er zit hier ergens een bug maar ik weet niet waar.
Als ik het programma start doet hij eerst ff (n)iets en crasht daarna
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
procedure TForm1.Button4Click(Sender: TObject);
var
FileHandle: THandle;
Buffer1: array[0..3] of Char; // alloceer 4 bytes
Buffer2: array of Char; //variabele rij (voor 2e deel)
Rslt: Integer;
dwwrite1:longword;
dwwrite2:longword;
toread1:longword;
toread2:longword;
nSize: Integer;
strSize: String;
// test deel
toread3:longword;
dwwrite3:longword;
Buffer3: array[0..0] of Char;
Bytesreken: Integer;
begin
FileHandle := CreateFile(Pchar(Label1.caption),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + FILE_FLAG_RANDOM_ACCESS, 0);
  try
  {Vraag bestands grote op in bytes.
  nSize := strtoint(GetFileSize(FileHandle, nil))-4;
  toread2:= nSize;
  Bytesreken:= nSize; }
  nSize := GetFileSize (FileHandle, nil);
  SetLength (strSize, 20);
  Str (nSize, strSize);


  //Hier komt het rekendeel, totale bestands grote - 4.
  Bytesreken:= strtoint(strSize)-4;
  toread2:= strtoint(strSize)-4;
  SetLength(Buffer2, Bytesreken); //(Bytesreken moet integer zijn!)
  
    // Lees byte 5 als deze 01 is dan is de file al gepatcht!
    toread3:=1;
    Rslt := SetFilePointer(FileHandle, 4, nil, FILE_BEGIN);
    if Rslt = -1 then
    begin
    ShowMessage('Error1');
    Exit;
    end;
    if not ReadFile(FileHandle, Buffer3, toread3, dwwrite3, nil) then
    begin
    ShowMessage('Error2');
    Exit;
    end;
    if Buffer3 = #$01 then
    begin
    ShowMessage('File has already been patched!');
    Exit;
    end;

    //Lees 1e deel, 1e 4 bytes uit het bestand.
    toread1:=4;
    Rslt := SetFilePointer(FileHandle, 0, nil, FILE_BEGIN);
    if Rslt = -1 then
    begin
    ShowMessage('Error1');
    Exit;
    end;
    if not ReadFile(FileHandle, Buffer1, toread1, dwwrite1, nil) then
    begin
    ShowMessage('Error2');
    Exit;
    end;
    label4.Caption := String(Buffer1);

    //Lees 2e deel, Filesize - 4 = toread2

    Rslt := SetFilePointer(FileHandle, 4, nil, FILE_BEGIN);
    if Rslt = -1 then
    begin
    ShowMessage('2nd part Error1');
    Exit;
    end;
    if not ReadFile(FileHandle, Buffer2, toread2, dwwrite2, nil) then
    begin
    ShowMessage('2nd part Error2');
    Exit;
    end;

    label5.Caption := String(Buffer2);
    label6.Caption := PChar(strSize);
    label12.Caption := PChar(Bytesreken);
  finally
    CloseHandle(FileHandle);
  end;

end;

jaja een hele was lijst... hmm mischien had ik ook wat weg kunne laten...
|:(

  • falcon4ever
  • Registratie: Oktober 2001
  • Laatst online: 25-08 23:36
hij moet tussen
code:
1
2
3
4
5
6
7
8
9
10
11
12
try
  {Vraag bestands grote op in bytes.
  nSize := strtoint(GetFileSize(FileHandle, nil))-4;
.
.
en
.
.  
//Hier komt het rekendeel, totale bestands grote - 4.
  Bytesreken:= strtoint(strSize)-4;
  toread2:= strtoint(strSize)-4;
  SetLength(Buffer2, Bytesreken); //(Bytesreken moet integer zijn!)

zitten want als ik dat weg laat doet hij het wel!

  • whoami
  • Registratie: December 2000
  • Nu online
Nou, ik weet ook niet waar je bug zit en ik heb geen zin (samen met vele anderen waarschijnlijk) om al die code te copy / pasten en het zelf te gaan uitzoeken.
Ik zou zeggen: gebruik je debugger eens, dan kan je precies weten waar je de fout op krijgt, en hoe je ze kunt oplossen.

GoT is geen helpdesk waar je zomaar je code kunt posten en zeggen: "het werkt niet, los het ff op of zoek het ff uit voor me aub".

https://fgheysels.github.io/


Dit topic is gesloten.