Ver Mensaje Individual
  #2  
Antiguo 20-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
1. Internamente, un string es un apuntador, y como la función es de la API de Windows y no de Delphi, éste no sabría que cantidad de memoria asignarle. Supongo que podrías usar un string pero especificando antes una longitud:

Código Delphi [-]
SetLength(Path, 260);

2. El porqué específico del 260 tendrás que preguntárselo a Bill Gates.

3. Ese parámetro indica a la API de Windows de qué tamaño es el buffer donde va a colocar el resultado. Si el tamaño es menor que lo que ocupa el path, windows te devolverá el número de bytes que debe tener tu buffer. Si somos muy exquisitos, deberíamos programar así:

Código Delphi [-]
var
  Path: PChar;
  Length: Integer;

begin
  Length := GetWindowsDirectory(Path, 0);
  GetMem(Path, Length);

  try
    GetWindowsDirectory(Path, Legth);
  finally
    FreeMem(Path);
  end;
end;

para así usar sólo la memoria indispensable.

4. El que programó ese ejemplo olvidó que un array[0..N] of Char es compatible con string.

// Saludos
Responder Con Cita