Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error en codigo (https://www.clubdelphi.com/foros/showthread.php?t=46234)

Delar 26-07-2007 20:46:12

Error en codigo
 
Bien, este codigo lo encontré buscando por el foro, y al ejecutarlo me da un error :S
Aquí el codigo:
Código Delphi [-]
procedure AddToStream(AFileName: TFileName);
  var
    fsOrigen,fsDestino: TFileStream;
  begin
    fsOrigen := TFileStream.Create(AFileName, fmOpenRead);
    Try
      fsDestino.CopyFrom(fsOrigen, fsOrigen.Size);
    finally
      fsOrigen.Free;
    end;
  end;
------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  fsDestino: TFileStream;
begin
  fsDestino := TFileStream.Create('C:\MIEXE.EXE', fmCreate);
  Try
    AddToStream('C:\WINDOWS\SYSTEM32\CMD.EXE');
    AddToStream('C:\WINDOWS\NOTEPAD.EXE');
  finally
    fsDestino.Free;
  end;
  WinExec('C:\MIEXE.EXE', SW_SHOW);
end;
El error es:
"Stream write error"
Alguna solución?

Delar 26-07-2007 20:48:17

OK, ya lo solucioné poniendo la variable fsDestino como publica.

Saludos!

delphi.com.ar 26-07-2007 20:55:40

Esa es mi letra! :D
En el código original el procedimiento AddToStream pertenecía al procedimiento TForm1.Button1Click. Tu lo separaste y creaste una nueva variable "fsDestino" que nunca se crea. Si quieres mantenerlo separado podrías hacer algo como:
Código Delphi [-]
procedure AddToStream(AFileName: TFileName; fsDestino: TFileStream);
var
  fsOrigen: TFileStream;
begin
  fsOrigen := TFileStream.Create(AFileName, fmOpenRead);
  Try
    fsDestino.CopyFrom(fsOrigen, fsOrigen.Size);
  finally
    fsOrigen.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  fsDestino: TFileStream;
begin
  fsDestino := TFileStream.Create('C:\MIEXE.EXE', fmCreate);
  Try
    AddToStream('C:\WINNT\SYSTEM32\CMD.EXE', fsDestino);
    AddToStream('C:\WINNT\NOTEPAD.EXE', fsDestino);
  finally
    fsDestino.Free;
  end;
  WinExec('C:\MIEXE.EXE', SW_SHOW);
end;

Saludos!

delphi.com.ar 26-07-2007 20:56:35

Cita:

Empezado por Delar
OK, ya lo solucioné poniendo la variable fsDestino como publica.

Me ganaste de mano, igualmente mi respuesta puede servirte para evitar el uso de variables públicas.

Saludos!

Delar 26-07-2007 20:57:44

Jeje, igualmente gracias ;)
Y separé el codigo, porque me daba error si habia una procedure dentro de otra.

Saludos!

delphi.com.ar 26-07-2007 21:00:13

Cita:

Empezado por Delar
Jeje, igualmente gracias ;)
Y separé el codigo, porque me daba error si habia una procedure dentro de otra.

:confused: ¿Qué compilador estas usando?

Delar 26-07-2007 21:01:57

Delphi 7 pero nunca me habia pasado eso :S

delphi.com.ar 26-07-2007 21:04:37

Cita:

Empezado por Delar
Delphi 7 pero nunca me habia pasado eso :S

Teóricamente te debería funcionar el código original. Teniendo en cuenta que al procedimiento embebido solo lo puedes llamar dentro del procedimiento que lo contiene.

Delar 29-07-2007 23:00:06

Hay alguna manera de ejecutar el segundo desde el primero? Ya sea separando el codigo o algo...

Delar 30-07-2007 23:41:06

Bump*****************a


La franja horaria es GMT +2. Ahora son las 20:08:02.

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