Incompatible type для FindClose

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

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

Incompatible type для FindClose

Сообщение CoverStory » 28.07.2008 10:48:21

Всем доброго! Появилась проблема в следующем коде:
Код: Выделить всё
unit main;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  ComCtrls, StdCtrls, windows;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListView1: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  ListItem: TListItem;
  sr: tsearchrec;
  NewColumn: TListColumn;
begin
  NewColumn := ListView1.Columns.Add;
  NewColumn := ListView1.Columns.Add; // добавдяются колонки
  if FindFirst('*.*', faAnyFile - faDirectory - faVolumeId, sr) = 0 then
  begin
    ListItem := ListView1.Items.Add; // создается объект
    ListItem.Caption := sr.name;
    ListItem.SubItems.Add(inttostr(sr.size));
    ListItem.SubItems.Add(datetimetostr(FileDateToDateTime(sr.time)));
    while FindNext(sr) = 0 do
    begin
      ListItem := ListView1.Items.Add;
      ListItem.Caption := sr.name;
      ListItem.SubItems.Add(inttostr(sr.size));
      ListItem.SubItems.Add(datetimetostr(FileDateToDateTime(sr.time)));
    end;
    FindClose(sr);
  end;

end;

initialization
  {$I main.lrs}

end.

С ошибкой
Код: Выделить всё
main.pas(53,17) Error: Incompatible type for arg no. 1: Got "TSearchRec", expected "LongWord"
main.pas(63) Fatal: There were 1 errors compiling module, stopping

Если убираю модуль Windows все компилируется на ура.
Интересно также следующее жму на findClose найти объявление с модулем windows он ссылается на файл func.inc без него на filutilh.inc
Помогите справиться!
CoverStory
новенький
 
Сообщения: 95
Зарегистрирован: 09.02.2006 18:21:42
Откуда: Семипалатинск

Re: Incompatible type для FindClose

Сообщение Sergei I. Gorelkin » 28.07.2008 11:11:39

Когда одно и то же имя объявлено в разных модулях (в данном случае - ф-ция с именем FindClose есть и в Windows, и в SysUtils), компилятор не всегда в состоянии определить, откуда именно его использовать, поэтому нужно указывать модуль в явном виде:
Код: Выделить всё
SysUtils.FindClose(sr);
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Incompatible type для FindClose

Сообщение CoverStory » 28.07.2008 12:43:52

Спасибо!
CoverStory
новенький
 
Сообщения: 95
Зарегистрирован: 09.02.2006 18:21:42
Откуда: Семипалатинск


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru