Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Procedimiento completa de basura otras variables

Hola Amigos ante todos Muchas gracias , aca ando un problemita!!
Tengo un procedimiento el cual completa con basura una variable de texto, de longitud definida, el problema es el siguiente. Luego de ejecutar dicho procedimiento, TODAS las variables que estubieran dentro del Procedimiento Padre/Abuelo, Son completados con basura.

lo solucione convirtiendolo en una Funcion, pero bueno dicho procedimiento ya estaba implementado. y no entiendo el porque de la destruccion de todas las variables.
el codigo

Código Delphi [-]

Procedure FillWithGarbageEmail(var pw: ShortString);
var
  Len, i: Integer;
begin
   Randomize;
   Len:=Length(pw);
   SetLength(pw,CPassEmailLen+1);//establece la nueva longitud
   pw[CPassEmailLen+1]:=Char(Len);//en el final incluye cual es el length del texto original
   for i:=Len+1 to CPassEmailLen do //luego de la longitud del string completa con basura
      pw[i]:=Chr(Ord(pw[i-Len])+(i*7)+2);
end;
Responder Con Cita
  #2  
Antiguo 02-07-2007
antrahxg antrahxg is offline
Miembro
 
Registrado: ene 2007
Posts: 10
Poder: 0
antrahxg Va por buen camino
Yo no veo en realidad cual es el problema se supone que la variable pw que pasas como parametro es la que se llena con basura pero dices

Cita:
Empezado por Enan0
Luego de ejecutar dicho procedimiento, TODAS las variables que estubieran dentro del Procedimiento Padre/Abuelo, Son completados con basura.
Yo no veo que otras variables pueden ser llenadas con basura, podrias especificarlo un poco mas.
Responder Con Cita
  #3  
Antiguo 02-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
La verdad que no puedo.. eso es todo lo que hace.. y desgraciadamente Si lo hace.. para que lo vieras deberia tener que pasarte Todo el codigo fuente y como te inmaginaras no puedo hacer eso...
Ya se que es un procedimiento sencillo pero bueno..
Si me completa de basura el resto de las Variables..
Responder Con Cita
  #4  
Antiguo 03-07-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
Cita:
Empezado por Enan0
La verdad que no puedo.. eso es todo lo que hace.. y desgraciadamente Si lo hace.. para que lo vieras deberia tener que pasarte Todo el codigo fuente y como te inmaginaras no puedo hacer eso...
Ya se que es un procedimiento sencillo pero bueno..
Si me completa de basura el resto de las Variables..
Si pides ayuda, lo minimo es dar la informacion necesaria para que se pueda resolver el problema. Si no puedes por problemas de licencias, no has venido al sitio adecuado, en ese caso contrata una empresa que te de soporte y repercute los costes a los clientes a los que venderas el programa.

Saludos
Responder Con Cita
  #5  
Antiguo 03-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Cita:
Empezado por Mick
Si pides ayuda, lo minimo es dar la informacion necesaria para que se pueda resolver el problema. Si no puedes por problemas de licencias, no has venido al sitio adecuado, en ese caso contrata una empresa que te de soporte y repercute los costes a los clientes a los que venderas el programa.

Saludos
Mick perdoname, pero creo que estoy pasando la funcion/procedimiento que produce el error, o acaso, pretendes que te suba 250 mb de codigos fuentes mas todos los paquetes que se requiere, y si, obvio que por licencias y otras cosas no puedo subir el codigo.

Pero bueno,
Disculpa o cerremos el tema
Responder Con Cita
  #6  
Antiguo 03-07-2007
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 21
adfa Va por buen camino
Hola Enan0, creo que la intención de Mick es ayudarte y no creo que la idea de el fueran muchos megas de código.

Hay cosas que no entiendo:
1) el Randomize, en ningun lugar del procedimiento llamas a la funcion Random (lo unico que hace ahi es liar a quien intente ayudar, pero tu tendras tus motivos).

2) porque usar el setlength, y cargar la posicion no es lo mismo hacer:
pw := pw + char(len);

3) el for me parece que debería de ser desde len+2

Pero si decis que el código esta bien, basta para mi
Lo que no me doy cuenta porque decis que te completa el resto de las variable con basura, al menos no deberia.

Saludos desde la otra orilla.
Responder Con Cita
  #7  
Antiguo 03-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Como ya te han dicho, no se trata de que subas todo el programa, pero deberías poner más empeño en establecer información que pueda servir para ayudarte. Por ejemplo, yo veo muy raro que uses SetLength para una variable de tipo ShortString ya que éstas, si bien son de longitud variable, ocupan un espacio fijo en memoria de 256 bytes, y desconozco qué puede suceder si pasas un valor mayor a SetLength. Como no has dicho de dónde sale la variable CPassEmailLen (es más, ni siquiera sabemos si es una variable o una constante) pues tampoco podemos saber si por ahí viene realmente el problema.

// Saludos
Responder Con Cita
  #8  
Antiguo 05-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Hola Roman.. bueno en ningun momento quise crear una disputa y mucho menos hacer algo de mala gana, sino ni posteaba, el tema es que una funcion tan sencilla que genere este tipo de error, me llamo mucho la atencion, Asique perdon POr el embrollo.
El tema es que no se que otro codigo puedo Subir, Ya que eso es lo que genera el error. Bueno tome unos Screen shoots, de que es lo que hace cuando ejecuta el procedimiento de la discordia, como veran en el Watch, se ven los errores en cuestion.

Antes que nada lo que hace esta funcion es completar con basura un string encriptado.
Lo que hace es establecer una longitd preestablecida.
Código Delphi [-]
pw[CPassEmailLen+1]:=Char(Len);

Aca lo que hace es. en el Final de String, Guarda Cual es la Longitud Real del String (Sin Basura), para luego porder obtener solo la informacion valida.
Bueno Comento el Porque del SetLength: en este caso se esta completando con basura el String de un password de una cuenta de mail, El length que se esta asignando, es mucho mayor que el Length valido de un password.
Entonces. Seteo el nuevo length, en la posiscion final, almaceno la Longitud Real del Password, y luego se completa desde la el Length del PSW, hasta el final.

espero que sea mas claro y dejo las Imagenes del error

http://img174.imageshack.us/my.php?i...tura005fm7.jpg
http://img179.imageshack.us/my.php?i...tura006pv6.jpg

Última edición por Enan0 fecha: 05-07-2007 a las 11:14:21.
Responder Con Cita
  #9  
Antiguo 05-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Cita:
Empezado por adfa
1) el Randomize, en ningun lugar del procedimiento llamas a la funcion Random (lo unico que hace ahi es liar a quien intente ayudar, pero tu tendras tus motivos).
Para serte sincero, yo tampoco se para que lo hace.. pero bueno. ahi estaba desde antes, lo he corrido con el Randomize comentado, y la parecer no produce ningun cambio, (por lo menos no es lo que genera el error), asique no le preste mayor importancia.

Cita:
Empezado por adfa
2) porque usar el setlength, y cargar la posicion no es lo mismo hacer:
pw := pw + char(len);
no, lo que pasaria ahi, es que Se inserta en el length +1, Ejemplo
(string orginal)

'ESTE ES MI STRING'

Si no me equivoco el length es 17, Si hago lo que vos decis seria!

'ESTE ES MI STRING17'
Y no podria completarlo con vasura!! ahora..
El "CPassEmailLen" Tiene una longitud de 50 Entonces Esto quedaria mas o menos asi.
'ESTE ES MI STRING (eL RESTDO DEL ESPACIO EN BLANCO) 17'

Cita:
Empezado por adfa
3) el for me parece que debería de ser desde len+2
Bueno a ver ahora.. lo que hace en el for es esto!!
'ESTE ES MI STRING(length 17) a partir del 18, basura hasta el 50' entonces
'ESTE ES MI STRING@#~~#¬€~#@€¬~€¬¬¬€¬sdfasdfasdfsd(hasta 50)17'

Entonces ya se sabe que desde la Pos 17 el resto es todo Verdura...

Bueno espero haber aclarado y perdon, Si se mal interpreto lo del tamaño y la informacion
(talvez estaba un poquito caliente.. con esto que me tenia mal.)
Responder Con Cita
  #10  
Antiguo 05-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
PErdon Es BASURA y no VASURA , pero no me deja editar
Responder Con Cita
  #11  
Antiguo 05-07-2007
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 21
adfa Va por buen camino
Cita:
Empezado por Enan0
no, lo que pasaria ahi, es que Se inserta en el length +1, Ejemplo
(string orginal)

'ESTE ES MI STRING'

Si no me equivoco el length es 17, Si hago lo que vos decis seria!

'ESTE ES MI STRING17'
Y no podria completarlo con basura!! ahora..
Bien, entendi la diferencia despues que aclaraste para que era el "CPassEmailLen", pero lo podes hacer sin el setlength igual haciendo:
pw := pw + dupestring(' ',CPassEmailLen-len)+char(len); //la funcion dupestring esta en la unit strutils


Y ahora entendi lo del for, el cual esta bien.
Para mi el único cambio bueno sería el no usar el setlength, proba eso que te puse arriba.

El randomize, fijate si en algun lugar del código se llama a la funcion random, si no es así no tiene sentido. El randomize inicializa el generador de numeros randomicos.

Saludos
Responder Con Cita
  #12  
Antiguo 05-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Me queda una duda, la variable AuxPsw está declarada de tipo TPassEmailString y tu la envias como parametro por referencia a un procedimiento que recibe un shortstring.

Si por alguna razon la clase TPassEmailString está mal implementada puede que cuando la pasas por referencia, el procedimiento invada posiciones de memoria que no le corresponden.

jeje, haber cala una cosa, declara la variable AcountID antes de cualquier otra variable, es una buena forma de probar que eso no es el error, como la declaras antes, quedaría seguramente en una posición de memoria anterior a la AuxPsw y no tendría porque modificarla, si sigue modificandola entonces al menos sabemos que no es eso
Responder Con Cita
  #13  
Antiguo 05-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
No hay tal Clase TPASSEmailStirng.. es solo un const!
TPassEmailString = String[CPassEmailLen];
donde CPassEmailleng=50; Que es una tonteria que con usar
TPasEmailsTring=String[50] ya eta. pero bueno como se usa por otros lados (el CPAss....) esta declarado..
Lo mas extraño de todo es Que "solo hace en esta unidad" en el resto funciona Bien..,
Si te fijas he comentado una funcion (en linea superior al procedimiento) que es exactamente lo mismo, pero Funcion..
Y no da problemas..
Bueno como dije.. es muy extraño..
Responder Con Cita
  #14  
Antiguo 05-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
haber, haber.

Para empezar
No hay tal Clase TPASSEmailStirng.. es solo un const!

Dices la frase como diciendo........... no seas tonto, como crees que va a haber tal clase.......... al menos así suena. Si no das información suficiente, no puedes quejarte de que uno no pueda ayudarte como tu quisieras. Recuerda que uno lo hace con la mejor intención e inviertimos 1 minuto de nuestro tiempo sin necesidad de hacerlo, así es que POR FAVOR, trata de ser cortéz


TPassEmailString=string[cPassEmailString];

En la imagen que posteas dice:
var
AuxPsw:TPassEmailString;

una constante..... creo que tengo un problema, yo pensaba que las constantes se declaraban difetente .

Ese tipo de errores SIEMPRE son culpa del programador. Si estás cerrado a las posibilidades, vas a dejar de aprender mucho.

Ahi te dejo mi propuesta, declara la variable AcountID antes de la AuxPsw declarada como TPassEmailString. y ejecuta el programa, perderías 30 segundos.......... pero es tu decisión obviamente

Última edición por gabrielkc fecha: 05-07-2007 a las 16:54:17.
Responder Con Cita
  #15  
Antiguo 05-07-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Cita:
Empezado por gabrielkc
Dices la frase como diciendo........... no seas tonto, como crees que va a haber tal clase..........
NOOO ni en pedo quise decir ESO.. solo comento que no hay tal Clase que es solo una Constante.. NADA MAS!! por favor no me mal interpretes que ya paso arriba y la verdad que en mi y en el tiempo que estoy en el foro.. jamas ah pasado esto.! asique no no!!!!

solo digo que no es eso.,. y perdon. esta delcarado como un Type..

Y sii obvio que hize la prueva que me dijiste..,
Tambien la declare (para probar) global al formulario.. y tambien como privada...

Y todo igual!

Tambien como comente.. lo solucione declarandolo como un Function!!

El tema del post.. es para ver si a alguien le ha pasado. y esas cosas. y tambien te agradezco por tu tiempo..
PD. el PROCEDIMIENTO luego lo llamo en otras unidades y no genera dicho error..
es muy "loco" lo que hace.

un saludo y muchas gracias por tu tiempo
Responder Con Cita
  #16  
Antiguo 05-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Perfecto.... problema solucionado... tema cerrado.

Que estes bien
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como retorno variables en un procedimiento rodrigo19 Varios 2 26-05-2007 03:16:50
usar variables de otras units anubis Varios 7 16-04-2007 09:24:04
SESIONES, VARIABLES y otras yerbas juanperez PHP 6 06-03-2007 09:50:08
Basura electronica Investment Noticias 1 10-05-2005 16:40:33
Como declarar variables para que las puedan utilizar otras units erocha Varios 1 07-11-2003 22:21:27


La franja horaria es GMT +2. Ahora son las 14:09:08.


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