Доступ к filerec

Вопросы программирования и использования среды Lazarus.

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

Доступ к filerec

Сообщение Роман1971 » 22.05.2009 09:29:32

Во время компиляции выдаёт ошибку:
Код: Выделить всё
Function GetFileHandle(var f : File):Longint;

begin
  result:=filerec(f).handle;
end;

D:\lazarus\fpc\2.2.4\source\rtl\objpas\sysutils\fina.inc(282,11) Error: Illegal type conversion: "File" to "<record type>"
С чем это связано?
В описании:
http://www.freepascal.org/docs-html/rtl ... andle.html
http://www.freepascal.org/docs-html/rtl ... lerec.html
никаких замечаний нет.
Компилятор должен был получить ссылку на запись описывающую нетипизированный файл.
Ошибка в преобразовании переменной File в тип FileRec.
Другие варианты:
result:=f.handle;
result:=TFileRec(f).handle;
дают туже ошибку "Illegal type conversion".
Как это исправить? :? :?:
Роман1971
новенький
 
Сообщения: 69
Зарегистрирован: 30.05.2007 09:14:53

Re: Доступ к filerec

Сообщение Mr.Smart » 22.05.2009 09:48:34

Ваш пример работает как в Lazarus 0.9.26 (fpc 2.2.2) так и в 0.9.27 (fpc 2.2.5).

Добавлено спустя 32 секунды:
Win32
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Доступ к filerec

Сообщение Роман1971 » 22.05.2009 10:32:40

Вы правы абсолютно.
Просто вставил в текст программы:
Код: Выделить всё
  FHandle:=FileRec(F).Handle;

- всё заработало! :)

Я пытаюсь портировать из Delphi 7 в Lazarus(Win32) компонент MediaPlayer.
Lazarus преобразовал код без особых проблем("Сервис" -> "Преобразовать модуль Delphi в Lazazrus...")
Пакет получился очень маленьким и сравнительно простым.
Проблема возникает при компиляции пакета.
Исходный текст пакета в Lazazrus и код из Delphi: http://rghost.ru/253946
Может там в переменных среды, что не так задано? :?:
Роман1971
новенький
 
Сообщения: 69
Зарегистрирован: 30.05.2007 09:14:53

Re: Доступ к filerec

Сообщение Mr.Smart » 22.05.2009 11:51:53

Вопервых. Добавте в MPlayer.pas в секцию Interface первым модуль Windows
Код: Выделить всё
...
interface

uses Windows,LCLIntf, Classes, Controls, Forms, Graphics, Messages,
  MMSystem, Dialogs, SysUtils;
...

Вовторых. В классе TCanvas (FPC) нереализован метод BrushCopy который используется при перерисовке. Решение перепесать этот участок. сторока 500 модуль MPlayer.pas.

Втретьих. отсутствует файл ресурсов MPlayer.res.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Доступ к filerec

Сообщение Роман1971 » 22.05.2009 13:22:17

Ок, спасибо за совет. Сегодня же опробую. :)

Добавлено спустя 37 минут 34 секунды:
Добавил:
Код: Выделить всё
uses Windows, LCLIntf, Classes, Controls, Forms, Graphics, Messages, MMSystem, Dialogs, SysUtils;

MPlayer.res - добавил в каталог и структуру пакета.
Это изменение:
Вовторых. В классе TCanvas (FPC) нереализован метод BrushCopy который используется при перерисовке. Решение перепесать этот участок. сторока 500 модуль MPlayer.pas.
- пока не переписывал.
Насколько понимаю, в строке 500 компилятор отдельно сообщит, что метод не реализован, а данная ошибка возникла раньше. Код в строке 500 подправлю чуть позже.
Компилятор выдаёт ошибку на том же месте:
D:\lazarus\fpc\2.2.4\source\rtl\objpas\sysutils\fina.inc(568,11) Error: Illegal type conversion: "File" to "<record type>"

Файлы пакета: http://rghost.ru/254247
Роман1971
новенький
 
Сообщения: 69
Зарегистрирован: 30.05.2007 09:14:53

Re: Доступ к filerec

Сообщение Mr.Smart » 22.05.2009 15:13:13

Если закоментировать строку с вызовом BrushCopy
Пакет компилируется без проблемв в FPC 2.2.2 и 2.2.5!
С версией 2.2.4 проверить немогу т.к. онная отсутствует.

Добавлено спустя 4 минуты 34 секунды:
D:\lazarus\fpc\2.2.4\source\rtl\objpas\sysutils\fina.inc(568,11) Error: Illegal type conversion: "File" to "<record type>"

Странно в файле fina.inc нет такого количества строк. Файл заканчивается на строке 288
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Доступ к filerec

Сообщение Роман1971 » 22.05.2009 23:08:17

Переустановил на сборку 20109 и FPC 2.2.5, компиляция прошла без замечаний.
Наверное баг какой-то был, временный, в предыдущей версии компилятора... :?
Других предположений пока нет.
*****
Спасибо за помощь!!!
:D
Роман1971
новенький
 
Сообщения: 69
Зарегистрирован: 30.05.2007 09:14:53


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru