переопределение Reset для typedfile

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

переопределение Reset для typedfile

Сообщение Vlad04 » 22.05.2020 08:21:00

Добрый день. Переопределение процедуры reset для типизированных файлов выдаёт RunError(2). Для бестиповых и текстовых файлов такой ошибки нет. Как решить?
Код: Выделить всё
procedure Reset(var F : typedfile);
begin
  system.Reset(F);
end;

procedure TMyApplication.DoRun;
var
  F : file of char;
begin
  assignfile(F, 'testreset.lpr');
  reset(F);
  closefile(F);
  Terminate;
end;
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Vlad04
новенький
 
Сообщения: 62
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: переопределение Reset для typedfile

Сообщение DYUMON » 22.05.2020 14:25:39

Возвращает ошибку , что файл не найден?
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 221
Зарегистрирован: 11.03.2009 13:32:54

Re: переопределение Reset для typedfile

Сообщение iskander » 22.05.2020 18:22:14

А что такое typedfile?

Вот в таком виде работает
Код: Выделить всё
program testreset;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp
  { you can add units after this };

type

  { TMyApplication }

  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
  end;

  FileOfChar = file of Char;

{ TMyApplication }

procedure Reset(var F : FileOfChar);
begin
  system.Reset(F);
end;

procedure TMyApplication.DoRun;
var
  F : file of Char;
begin
  assignfile(F, 'testreset.lpr');
  reset(F);
  closefile(F);
  Terminate;
end;

constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;

var
  Application: TMyApplication;
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
end.
iskander
постоялец
 
Сообщения: 378
Зарегистрирован: 08.01.2012 18:43:34

Re: переопределение Reset для typedfile

Сообщение Vlad04 » 26.05.2020 05:51:15

iskander писал(а):А что такое typedfile?

Обобщение для file of <type>.
В модуле system определены четыре процедуры Reset
Код: Выделить всё
Procedure Reset(var f:File;l:Longint);
Procedure Reset(var f:File);
Procedure Reset(var f : TypedFile);
Procedure Reset(var t:Text);

procedure Reset(var F : FileOfChar); - хорошо, что это работает, но требуется общее решение, для различных типов.
Аватара пользователя
Vlad04
новенький
 
Сообщения: 62
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: переопределение Reset для typedfile

Сообщение iskander » 26.05.2020 12:45:01

Vlad04 писал(а):Обобщение для file of <type>.

А где он объявлен?
iskander
постоялец
 
Сообщения: 378
Зарегистрирован: 08.01.2012 18:43:34

Re: переопределение Reset для typedfile

Сообщение Vlad04 » 26.05.2020 13:26:09

iskander писал(а):А где он объявлен?

наверное там же, где и file, и text
Аватара пользователя
Vlad04
новенький
 
Сообщения: 62
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: переопределение Reset для typedfile

Сообщение iskander » 27.05.2020 16:52:34

Vlad04 писал(а):наверное там же, где и file, и text

Беглый поиск в документации и исходниках rtl ничего не дал.
Внутренний псевдотип компилятора?
Код, который fpc генерит (x86) для вашего Reset:
Код: Выделить всё
  xor    edx,edx
  call   fpc_reset_typed
  call   fpc_iocheck 

fpc_reset_typed описана в compproc.inc как
Код: Выделить всё
Procedure fpc_reset_typed(var f : TypedFile;Size : Longint); compilerproc;

т.е. она вызывается как fpc_reset_typed(F, 0), информация о размере записи игнорируется.
Мне кажется, что все это похоже на глюк компилятора, т.е. либо на строке
Код: Выделить всё
  procedure Reset(var F : typedfile);

он должен был сгенерировать ошибку Error: Identifier not found "typedfile", либо корректно использовать информацию о размере записи файла.
iskander
постоялец
 
Сообщения: 378
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru