Цитата | Quote(yah @ 26.08.2009 - 16:52)
"xf_malloc" - не встречался.
Это оболочка для
malloc, используется по всему коду, который перевожу, можно префикс xf_ опустить, смысл от этого не поменяется.
Собственно проблемы с
fgets (). Что из Delphi-функций может быть использовано вместо неё? Пробовал так:
» Нажмите, для открытия спойлера | Press to open the spoiler «
Code
function ReadString (Afile: hFile; Dest: PChar; nDestLength, nCodePage: DWORD): PChar;
var
lpDest: PAnsiChar;
nLength: integer;
nNewLength: integer;
begin
GetMem(lpDest, (nDestLength+1));
FillMemory(lpDest, (nDestLength+1), 0);
ReadFile(Afile, lpDest^, nDestLength, nDestLength, nil);
if nDestLength <> 0 then begin
MultiByteToWideChar(CP_OEMCP, 0, lpDest, nDestLength, Dest, nDestLength);
end
else begin
FreeMem(lpDest);
exit;
end;
FreeMem(lpDest); // <-- Тут AV
GetMem(Result, nDestLength+1);
lstrcpy(Result, Dest);
lstrcat(Result, #0);
end;
Получаю AV при попытке освобождения памяти. Если не использовать ReadFile, то всё нормально, правда тогда ф-я вообще ничего не читает.