FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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:
Delphi 11:
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. |
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
Aunque otra alternativa seria que hagas una DLL en Delphi 7 y la consumas desde Delphi 11
|
#4
|
||||
|
||||
Buenos dias¡¡
Siento haber tardado tanto en responder, no pude hacerlo antes. Cita:
El valor esta cambiando en esta línea, al introducir el cuarto dígito ('1111').
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:
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. |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
Gracias Egostar.
Cita:
Muchas gracias¡¡
__________________
Inieeeesssstademiviiiiidaaaaa. |
#7
|
|||
|
|||
Cita:
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 |
#8
|
||||
|
||||
Hola¡¡
Cita:
Ahora puse un showmessage en la dll para ver la diferencia digito a digito y ya no entiendo nada. Cuando ejecuto la funcion los dígitos pares (wClave1[i]) no tienen valor Os paso la dll hecha en Delphi7...
y este es la rutina en Delphi 12 que consume la dll...
Desde Delphi 12, al introducir '1111' en el edit y luego al hacer click en el boton, muestra el resultado digito a digito, y en los digitos pares aparece un valor nulo en wClave1[i]. Desde Delphi 7 da el valor esperado. No entiendo nada, se me escapa. Gracias¡¡
__________________
Inieeeesssstademiviiiiidaaaaa. |
#9
|
|||
|
|||
Cita:
Crea la DLL en Delphi 7 así
Y con Delphi 11 consumela así
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#10
|
||||
|
||||
Muchas gracias egostar¡¡¡¡
Que crack¡¡ Va perfecto. Millón de gracias¡¡ (y una cervecita a mi salud¡¡)
__________________
Inieeeesssstademiviiiiidaaaaa. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Capturar imagenes con WebCam y Delphi 11 Alexandria | trex2000 | Gráficos | 5 | 08-04-2024 09:45:21 |
SDK y jedi Delphi Alexandria | rg8143454 | Desarrollo en Delphi para Android | 6 | 08-10-2023 16:46:23 |
Problema en Delphi Alexandria con Firebase Cloud Messaging | elcharlie | FireMonkey | 0 | 02-02-2022 16:23:19 |
Como declarar una funcion en Delphi que devuelve la k-esima palabra de una cadena | branncg | Varios | 3 | 12-06-2015 16:24:02 |
funcion en dll usada en vb6 se comporta diferente en delphi | erickperez6 | Varios | 2 | 29-05-2013 19:37:53 |
|