PDA

Ver la Versión Completa : Problema con un procedure en otra unidad


HombreGordo
23-12-2011, 03:41:08
Saludos, hacía mucho tiempo que no escribía por acá... jejeje, ya hasta actualicé mi IDE y todo... Aunque sigo siendo el novato de siempre con ganas de aprender! Mi problema es uno que seguramente ya ustedes habrán resuelto en sus inicios... Tengo un procedure al que le estoy pasando unos parámetros, pero al parecer no pone los valores donde debe ser cuando es llamado.

Primero que nada, hice esto porque si no luego el SetLength me da un error y el procedure parece no reaccionar.
type
TStringArray = array of string;
Luego de eso... Tuve que hacer que mi procedure (para que funcionara) de esta manera.
procedure ParamSetToArray(s: string; aCmds: TStringArray);
var
count, i, pos: integer;
begin
s:=Trim(s)+' ';
count:=CountParams(s);
SetLength(main.arrayCommands, count+1);
i:=0;
pos:=AnsiPos(' ', s);
while (count >= 0) do begin
main.arrayCommands[i]:=Copy(s, 1, pos);
Delete(s, 1, pos);
pos:=AnsiPos(' ', s);
i:=i+1;
count:=count-1;
end;
end;
En vez de hacer uso del aCmds que le puse, tuve que obviarlo y ponerle el que de una vez quería, pero no es la idea... la idea es que si hago uso de este procedure en otra parte, lo maneje con el que pase en los parámetros... Es decir, cuando le quiera llamar de la siguiente manera: ParamSetToArray(editCmd.Text, arrayCommands);Que deje el resultado sobre el 2ndo parámetro que se le dejó, (así he visto que funciona -por ejemplo- ProcessPath). Gracias!

ACTUALIZADO: Lo he resuelto, es que dejo la pregunta y sigo intentando a ver si doy con la solución jejeje. Reemplacé todos los "main.arrayCommands" por "aCmds" en el bloque de código. También cambié la declaración a "procedure ParamSetToArray(s: string; var aCmds: TStringArray);", me imagino que el "var aCmds" marca la diferencia.

Lord Delfos
23-12-2011, 19:20:35
Tarrrrrde lo veo, pero bueno, por si queda duda y para futuras referencias, he aquí un hilo en el que se habla de var, sin var, out y const (más o menos por mitad de página):

http://www.clubdelphi.com/foros/archive/index.php?t-67508.html