Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > PWideChar & FileMapping


Автор: serious 8.4.2003, 16:37
Есть функция, возвращает PWideChar. В этой функции читаю файл, используя FileMapping:
Код
if MappedData <> nil then
 for x := 1 to FileLength do
 begin
   Result := Result + PWideChar (MappedData);
   Inc (PWideChar(MappedData));
 end;

Delphi ругается.

Автор: stab 8.4.2003, 17:44
А какой у тебя формат файла?

Автор: serious 8.4.2003, 18:42
Цитата(cully @ 8.4.2003, 09:44)
А какой у тебя формат файла?

Txt обычный в Unicode.

Автор: stab 8.4.2003, 19:00
может так будет нормально:

function GetWideText(MappedData: Pointer; FileLength: Integer): WideString;
begin
SetString(Result, PWideChar(MappedData), FileLength);
end;

Я не пробовал, но должно работать с вероятностью 99% smile.gif

Автор: serious 9.4.2003, 16:07
Цитата(cully @ 8.4.2003, 11:00)
function GetWideText(MappedData: Pointer; FileLength: Integer): WideString;
begin
SetString(Result, PWideChar(MappedData), FileLength);
end;

Вызываю эту функцию в еще одной функции, вроде
if MappedData <> nil then
Result := GetWideText (MappedData, FileLength);
Функция того же типа.

Он грит, что ошибка, извини, парень, память не может быть 'read'

Автор: stab 10.4.2003, 09:11
попробуй еще так, у мя работало:

Код

procedure TForm1.Button1Click(Sender: TObject);
const
 FileName = 'c:\test_uni.txt';

var
 FileHandle, FileMappingHandle: Integer;
 MappedData: Pointer;
 txt: WideString;

begin
FileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 FileMappingHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
 MappedData := MapViewOfFile(FileMappingHandle, FILE_MAP_READ, 0, 0, 0);


 // я делал файл с помощбю блокнота (WinXP) и сохранил в фомате Юникод
 SetString(txt, PWideChar(Integer(MappedData) + 2), (GetFileSize(FileHandle, nil) - 2) div 2);
 Memo1.Lines.Text := txt;


UnmapViewOfFile(MappedData);
 CloseHandle(FileMappingHandle);
 CloseHandle(FileHandle);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)