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
jaja een hele was lijst... hmm mischien had ik ook wat weg kunne laten...
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...