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 Hace 1 Semana
Avatar de Matorral
Matorral Matorral is offline
Miembro
 
Registrado: oct 2006
Ubicación: Ferrol-Galicia
Posts: 39
Poder: 0
Matorral Va por buen camino
Funcion ORD en Delphi 7 devuelve valor diferente que en Delphi 11 Alexandria

Buenos días¡¡

Estoy cambiando un viejo programa desarrollado en Delphi7 a Delphi 11 Alexandria.
Tengo un problema con una función "Codifica()", que en Delphi7 me devuelve un valor, y en Delphi 11 me devuelve otro diferente.

Delphi 7:
Código Delphi [-]
function Codifica(v: string): integer;
var wClave1: string;
    i,j: longint;
begin
   j:=0;
   wclave1 :=v;
   for i:=1 to Length(wClave1) do
      j:=j*255+ord(wClave1[i]);

   j:=j*7;
   Result:=j;
end;

Delphi 11:
Código Delphi [-]
function Codifica(v: string): int64;
var wClave1: string;
    i,  j:int64;
begin
   j:=0;
   wclave1 :=v;
   for i:=1 to Length(wClave1) do
      j:=j*255+ord(wClave1[i]);
   j:=j*7;
   Result:=j;
end;

Pasando como parámetro ‘1111’ en Delphi4 me devuelve ‘1414835712’ y en Delphi 11 me devuelve ‘5709803008’.

El tipo integer (delphi7) lo cambié por int64(delphi11) porque me daba un error de ejecución "integer overflow".

Supongo que tendrá que ver con que en delphi 11 la funcion system.ord devuelve un valor tipo byte y en Delphi 7 de tipo integer, pero no se cómo solucionarlo.

Alguien podría darme una pista de que tendría que hacer para que el valor devuelto en Delphi11 fuese igual al devuelto por la funcion de Delphi7?

Gracias de antemano¡¡
__________________
Inieeeesssstademiviiiiidaaaaa.
Responder Con Cita
  #2  
Antiguo Hace 1 Semana
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 266
Poder: 2
pgranados Va por buen camino
Hola, acabo de hacer la prueba en Delphi 10.4 y obtengo el mismo resultado con ambas funciones: 1414835712

Te recomendaria poner un stop en Delphi 11 para ver en donde esta cambiando el valor.
Responder Con Cita
  #3  
Antiguo Hace 1 Semana
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 266
Poder: 2
pgranados Va por buen camino
Aunque otra alternativa seria que hagas una DLL en Delphi 7 y la consumas desde Delphi 11
Responder Con Cita
  #4  
Antiguo Hace 3 Días
Avatar de Matorral
Matorral Matorral is offline
Miembro
 
Registrado: oct 2006
Ubicación: Ferrol-Galicia
Posts: 39
Poder: 0
Matorral Va por buen camino
Buenos dias¡¡

Siento haber tardado tanto en responder, no pude hacerlo antes.

Cita:
Empezado por pgranados Ver Mensaje
Hola, acabo de hacer la prueba en Delphi 10.4 y obtengo el mismo resultado con ambas funciones: 1414835712

Te recomendaria poner un stop en Delphi 11 para ver en donde esta cambiando el valor.
Gracias por responder pgranados.


El valor esta cambiando en esta línea, al introducir el cuarto dígito ('1111').

Código Delphi [-]
     j:=j*7;


Y creo que el problema es que en Delphi 7 utilizo variables tipo integer y en Delphi 11 variables int64 (en Delphi 11 no puedo declarar la variable "j" como integer o como LongInt porque salta un error al introducir el cuarto dígito (el cuarto '1') :

"Integer overflow".


Cita:
Empezado por pgranados Ver Mensaje
Aunque otra alternativa seria que hagas una DLL en Delphi 7 y la consumas desde Delphi 11
También probé a hacer la dll en Delphi 7 y consumirla desde Delphi 11 y dan valores diferentes.


La "putada" es que el valor de la función Codifica() lo guardo en el registro de cada usuario. Al entrar en la aplicación pido el pin, lo codifico y hago una búsqueda del valor devuelto por Codifica() para identificar al usuario.
Al ejecutar la aplicación compilada con Delphi 11 no localiza el pin codificado.

En fin, seguiré buscando una solución a esto porque necesito mantener la Codificación antigua del pin (Delphi 7) en la aplicación actualizada a Delphi 11.

Gracias pgranados¡¡
__________________
Inieeeesssstademiviiiiidaaaaa.
Responder Con Cita
  #5  
Antiguo Hace 2 Días
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Hola

Esto es lo que hace Delphi 7 conforme vas realizando tus operaciones aritméticas.

1 - 49
1 - 12544
1 - 3198769
1 - 815686144

815686144 * 7 = 1414835712

Pero en realidad si se multiplica esa cantidad por 7 el resultado debería ser 5,709,803,008 como te lo genera Delphi 11

Me parece que Delphi 7 no está evaluando el overflow del entero y lo está truncando en lugar de enviar la excepción, algo que yo no había visto hasta ahora.

Ahora, eso trae muchas inconsistencias en tu aplicación (desde mi punto de vista).

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo Hace 2 Días
Avatar de Matorral
Matorral Matorral is offline
Miembro
 
Registrado: oct 2006
Ubicación: Ferrol-Galicia
Posts: 39
Poder: 0
Matorral Va por buen camino
Gracias Egostar.

Cita:
Empezado por egostar Ver Mensaje
Ahora, eso trae muchas inconsistencias en tu aplicación (desde mi punto de vista).
Pues si, lo que me preocupa ahora mismo es como actualizar las versiones de los clientes para mantenerles el pin de los usuarios.

Muchas gracias¡¡
__________________
Inieeeesssstademiviiiiidaaaaa.
Responder Con Cita
  #7  
Antiguo Hace 2 Días
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Matorral Ver Mensaje
Gracias Egostar.



Pues si, lo que me preocupa ahora mismo es como actualizar las versiones de los clientes para mantenerles el pin de los usuarios.

Muchas gracias¡¡
Hola

En este caso lo que yo intentaría es crear una DLL con Delphi 7 que haga esa operación y regrese el dato esperado.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
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
Capturar imagenes con WebCam y Delphi 11 Alexandria trex2000 Gráficos 5 08-04-2024 08:45:21
SDK y jedi Delphi Alexandria rg8143454 Desarrollo en Delphi para Android 6 08-10-2023 15:46:23
Problema en Delphi Alexandria con Firebase Cloud Messaging elcharlie FireMonkey 0 02-02-2022 15:23:19
Como declarar una funcion en Delphi que devuelve la k-esima palabra de una cadena branncg Varios 3 12-06-2015 15:24:02
funcion en dll usada en vb6 se comporta diferente en delphi erickperez6 Varios 2 29-05-2013 18:37:53


La franja horaria es GMT +2. Ahora son las 12:39:48.


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