Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2005
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.677
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por dec
Creo que Casimiro se sorprende porque sigues utilizando una función que devuelve un "TStrings" como una catedral
Efectivamente, es como si una función tiene que devolver un string y hago que devuelva un entero, y luego convertir ese entero a string, sin motivo, necesidad ni falta que hace.

Pero, bueno, allá cada uno con sus manías
Responder Con Cita
  #2  
Antiguo 11-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Pues ahora que hablamos de un memo, mas liado estoy "compadre"

Código Delphi [-]
var lista:TStringList;
begin
lista := GetIps;
Memo.Lines.Assign(lista);
lista.Free;

Y como la funcion devuelve un TStrings, que es del mismo tipo que un Memo.Lines, pues nada se asigna el contenido de uno a otro y corriendo que es gerundio.

Que no, que solo quiero una IP:
Código Delphi [-]
var listaIps:TStringList;
begin
  listaIps:= GetIps;
  if listaips.count>0 then
    memo1.lines.Add(listaips.items[0];
  listaIps.Free;
end;

Advertencia Gorda: La función GetIps se encarga de crear el TStringList que está devolviendo en Result; por eso yo no creo la ListaIps. Solo me encargo de destruirlo con .Free

Otra cosa: Devolver un String con un separador de $$, pues que quieres que os diga, no lo veo yo claro, ya que para eso usamos las propiedades del propio TString:

CharDelimiter
DelimitedText
Y si queremos usar el delimitador "coma" pues ni siquiera tenemos que usar CharDelimiter, ya que el TString provee la propiedad CommaText que precisamente nos devuelve un String con todos lo items separados por comas.

Despues de todo este rollo, ¿que vas a suar?

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

Última edición por Lepe fecha: 11-08-2005 a las 17:31:51.
Responder Con Cita
  #3  
Antiguo 11-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Lepe
Devolver un String con un separador de $$, pues que quieres que os diga, no lo veo yo claro, ya que para eso usamos las propiedades del propio TString
¡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

Cita:
Empezado por Lepe
Advertencia Gorda: La función GetIps se encarga de crear el TStringList que está devolviendo en Result; por eso yo no creo la ListaIps. Solo me encargo de destruirlo con .Free
Buena advertencia, sí señor. Creo que leí en estos mismos Foros cómo se desaconsejaba devolver "así" los resultados de una función de esas características... ahora digo que trataré de quedarme con la solución que das a eso Lepe.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 11-08-2005
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.677
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
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í.


nunca digas nunca jamás (me ha venido a la cabeza ese título de 007)
Responder Con Cita
  #5  
Antiguo 12-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
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
  #6  
Antiguo 13-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Lepe
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.
El que no se ha explicado con claridad soy yo, ¡pero si hasta rectifiqué uno de los mensajes que he publicado en este Hilo! Digo que si la función va a devolver un "string", ¿para qué queremos usar el "TStrings"? ¿Para ir añadiendo una línea a cada IP que se encuentre? Pero, suponiendo que queremos que esa función, precisamente, devuelva un "string", ¿porqué no nos olvidamos del "TStrings" y concatenamos en una cadena las posibles "Ips" y luego damos como resultado esta cadena?

Sobre todo, porque, en el momento en que no necesitemos que esa función nos devuelva un "string" bien podemos usarla tal cual, eso sí, devolviendo la lista de "Ips" en un parámetro "TStrings" pasado como referencia a la función o creando una variable de tipo "TStrings" en la función, que sea la que devuelva, nunca haciéndolo como se hace arriba (no liberando el "TStrings" creado en "Result") pues a simple vista llama la atención que ese no es un buen camino.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:18:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi