Ver Mensaje Individual
  #18  
Antiguo 12-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Cita:
Empezado por dec

¡Pero se trata de devolver una cadena de caracteres! Si devolviésemos un "TStrings" claro está que podríamos hacer uso de las propiedades a que haces referencia
No me habré explicado con claridad, La primera funcion devuelve un TStrings ¿verdad?, pues simplemente:
- cambiamos el parámetro de salida por String,
- devolvemos CommaText ó DelimitedText, Se acabó el trabajo.
- Liberamos la memoria del TStringList de la función.

Cita:
Empezado por Casimiro Notevi
Esa función GetIps es muy peligrosa, tener que acordarse que no libera la memoria del objeto creado. Es una fuente de posibles problemas. Jamás usaría algo así.
Y no solo eso, ya que además, intuitivamente tu creas el TStringList en memoria antes de usar la función, y despues la susodicha, crea de nuevo el TStringList, por tanto, el que tú creaste, se queda en el limbo y jamás se libera.

La solución sería crear algo así:
Código Delphi [-]
function getIPs(Lista: Tstrings):Boolean;
 type
   TaPInAddr = array[0..10] of PInAddr;
   PaPInAddr = ^TaPInAddr;
 var
   phe: PHostEnt;
   pptr: PaPInAddr;
   Buffer: array[0..63] of Char;
   I: Integer;
   GInitData: TWSAData;
 begin
   WSAStartup($101, GInitData);
   if not Assigned(Lista) then
     raise Exception.Create('func GetIps: Se necesita un TString previamente creado.');
  Lista.Add('lo que sea');
  // demás instrucciones


Un saludo.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita