Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   FindClose. Error al compilar. (https://www.clubdelphi.com/foros/showthread.php?t=71360)

McK 15-12-2010 09:11:06

FindClose. Error al compilar.
 
Hola compadres,

Tengo un problema con la instrucción FindClose. La uso para detectar archivos junto con FindFirst y FindNext, pero a la hora de cerrar el TSearchRec con FindClose Delphi me da el siguiente error al compilar:

Incompatible types: 'Cardinal' and 'TSearchRec'

El código es bien simple y en uses he añadido FileCtrl...

Código:

...
var
  FileSearch: TSearchRec;
...
begin
...
  if FindFirst(Path + 'file.txt', faAnyFile and not (faVolumeID or faDirectory), FileSearch) = 0 then
  begin
    repeat
    ....
    until FindNext(FileSearch) <> 0;
    ....
    FindClose(FileSearch);
  end;
...

Buscando en la ayuda de Delphi he encontrado que existe otra instrucción llamada FindClose y cuyo parametro es de tipo Cardinal por lo que me está tomando la sentencia como esa en vez de como un TSearchRec...

¿Que puedo hacer para que no me pase esto?

Un saludo y muchas gracias de nuevo :)

ecfisa 15-12-2010 10:19:42

Hola.

Probé tu código con Delphi 7 y como esperaba funciona bién.

Te pongo el código que usé, hice algunos cambios pero no alteran la funcionalidad.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  SR: TSearchRec;
begin
  if FindFirst('C:\*.*', faAnyFile and not (faVolumeID or faDirectory), SR) = 0 then
  begin
    repeat
       Memo1.Lines.Add(SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

En un principio pensé que estaba tomando la función FileSearch en lugar del nombre de variable, pero no es eso...
Tu código debería funcionar ok.

Saludos.

Edito: No incluí la unit FileCtrl pero tampoco es eso.

McK 15-12-2010 12:03:37

Ya si es super curioso... A mí también me funcionaba hasta que agregue una nueva unidad.... si buscas en la ayuda de delphi FindClose justo encima de FindClose function sale FindClose a secas y es ese el que esta usando por defecto mi programa. Me pide la variable hFindFile... en vez de una TSearchRec

los uses que utilizo en la nueva unidad son:

uses
SysUtils, Dialogs, MainFrm, Unit4, Windows, Messages, Variants, Classes, Graphics, Controls, Forms, StdCtrls, Grids, BaseGrid, AdvGrid, AdvGridExcel, ComCtrls, ExtCtrls, Spin, IniFiles, FileCtrl;

Muchas gracias por haberte molestado de todas maneras ;)

ecfisa 15-12-2010 12:41:50

Hola McK.

Ahora que veo como tenés el órden de inclusión de las units, me doy cuenta...

La función FindClose está definida en la unit SysUtils y tambien en la unit Windows.

En la unit Windows la función esta declarada con un parámetro de tipo Cardinal (handle) y en SysUtils con un parámetro de tipo TSearchRec.

Al estar SysUtils declarada primera, la posterior inclusión de la unit Windows superpone la función, dandote el problema.

Tenés dos formas de solucionarlo:

Cambiando el órden de inclusión.
Código Delphi [-]
uses
  Windows, SysUtils, Dialogs, ...

O calificando la función.
Código Delphi [-]
  SysUtils.FindClose(SR);


Un saludo.

McK 15-12-2010 12:58:59

Efectivamente!!! Solucionado!!

Mil gracias ecfisa!

DarkDudae 21-12-2010 13:31:16

Pues justo acabo de encontrarme con este problema y me ha ahorrado un buen rato de investigación.

Muchas gracias a todos.

Neeruu 07-06-2012 00:02:57

Gracias por la Solución...


La franja horaria es GMT +2. Ahora son las 05:25:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi