- Код: Выделить всё
procedure MakeInterface(nameOfFile:pchar);
label loop;
var
hand:handle;
size:dword;
readed:dword;
buff:^byte;
i:integer;
begin
buff:=pbyte(0);
hand:=CreateFile(nameOfFile,GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
buff:=LocalLock(LocalAlloc(LPTR,GetFileSize(hand,nil)+1));
if buff=nil then begin
MessageBox(0,'Can"t allocate memory','ERROR',0);
ExitProcess(0);
end;
ReadFile(hand,buff,GetFileSize(hand,nil),readed,nil);
MessageBox(0,'suc','suc',0);
i:=0;
loop:
while buff[i]<>$24 do begin
MessageBox(0,'lup','lup',0);
if buff[i]=$0D then begin
buff[i]:=0;
buff[i+1]:=0;
i+=2;
goto loop;
end;
i+=1;
end;
end;
при обращении к ней происходит AV.Ну чтож, загружаю отладчик и смотрю что не так.Оказалась ошибка тут-while buff[i]<>$24 do begin, компилятор сгенерировал такой код
00500F7F |> 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14];ebp-14-адрес начала выделеной памяти
00500F82 |. 8B45 E8 |MOV EAX,DWORD PTR SS:[EBP-18];это i
00500F85 |. 0FB60402 |MOVZX EAX,BYTE PTR DS:[EDX+EAX]
Я обратился к указателю здесь, как в С, но похоже надо как-то подругому.Просветите пожалуйста.