Ver Mensaje Individual
  #9  
Antiguo 09-08-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
No creo que pueda usar un string sin conocer de antemano la longitud de la cadena devuelta. Dicho de otra forma, necesitaría usar SetLength antes de la llamada, de lo contrario no habría memoria asignada para recibir el resultado.
Teniendo encuenta que va a usar una función de una dll parecida a GetSystemDirectory:
Cita:
Empezado por usuario87 Ver Mensaje
...mi programa usa una funcion que esta dentro de una dll, esta funcion es parecida a GetSystemDirectory...
El tamaño debe ser MAX_PATH. El problema del tamaño también lo tenemos en un buffer, y como ya dije antes debe asignarlo antes de usarlo:
Cita:
Empezado por escafandra Ver Mensaje
...puedes usar un Buffer tipo array of char o un String con longitud asignada previamente o un ShortString si no va a ser mas larga de 255...
Luego debes reasignar el tamaño del String al verdadero número de caracteres. En definitiva usas el String como un mero Buffer. Un ejemplo:
Código Delphi [-]
var
 S: String;
begin
 SetLength(S, 100);              // Asigno un tamaño
 lstrcpy(@S[1], 'Hola');         // API estilo C para copiar una cadena terminada en nulo 'Hola'#0
 S:= String(PAnsiChar(@S[1]));   // Reasigno el tamaño del String
end;

Saludos.
Responder Con Cita