FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problema con parámetros en UDF's
Hola a todos!
Utilizo FireBird 1.5.1, Delphi 7 y Windows XP; tengo problemas con los parámetros en las UDF's. Escribí la siguiente función en una librería y la coloque en la carpeta <DIR_INSTAL_FIRBIRD>\UDF
Posteriormente declare la función y un procedimiento para llamarla en mi base de datos.
Si ejecuto el procedimiento me muestra lo siguiente: Procedure executing results: VAL = 193302400 Obviamente este no es el resultado que debería devolver y en general cualquier función que utilizo con parámetros INTEGER o DOUBLE tiene el mismo comportamiento. Espero que alguién pueda ayudarme a resolverlo. De ante mano muchas gracias. |
#2
|
||||
|
||||
StdCall en lugar de CDecl
¡Buen día a todos!
Creo que el problema se debe al uso de la convención de llamada CDecl en lugar de StdCall (la utilizada para las UDFs de InterBase/Firebird). Espero esto sea de utilidad, seguimos en contacto. Al González . |
#3
|
||||
|
||||
Gracias por responder Al González.
Modifique la declaración de la función por stdcall como lo indicaste, pero desafortunadamente obtengo el mismo resultado. Seguramente hay algo que aún desconozco al respecto de las UDF's, si alguién tiene algún ejemplo de cómo se programan estas funciones con Delphi 7 y FireBird o Interbase les agredecería que me lo hicieran llegar por este medio. Nuevamente gracias. |
#4
|
||||
|
||||
¡Hola de nuevo!
Creo que debes usar By Value en lugar de By Descriptor, ya que de lo contrario Firebird/InterBase toma los argumentos y resultados de UDFs como parámetros por referencia. Es decir, casi podría segurar que el valor 193302400, que mencionas en tu ejemplo es la dirección de memoria de un entero que tiene un valor de 100. Espero esto sea de utilidad, seguimos en contacto. Al González . |
#5
|
||||
|
||||
OK!
Problema solucionado. Mil gracias Al González. |
#6
|
||||
|
||||
Feliz con el resultado
Nota al mensaje anterior:
El problema lo solucione modificando los parámetros de la función para recibirlos por referencia, es decir agregando la cláusula var antes de la variable de tipo entero.
Me ha sido de gran utilidad para mi trabajo, nuevamente mil gracias. Última edición por Héctor Randolph fecha: 21-12-2004 a las 08:03:39. |
|
|
|