PDA

Ver la Versión Completa : Error en codigo


Delar
26-07-2007, 20:46:12
Bien, este codigo lo encontré buscando por el foro, y al ejecutarlo me da un error :S
Aquí el codigo:
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 (http://www.clubdelphi.com/foros/showpost.php?p=13896&postcount=8) 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:

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
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
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
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