![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
UDFs y Delphi 2010
Hola a todos.
Estoy intentando desarrollar una DLL que tiene algunas funciones de usuarios para Firebird ( UDF ) y lo estoy programando en Delphi 2010. El problema que presento es que una función debe devolver un PCHAR y en lugar de devolverme la cedena completa, solo me está devolviendo el primer carácter de dicha cadena. Anteriormente tenía otra UDF similar programada con Delphi 5 y funciona correctamente. Se que tiene algo que ver con el nuevo tratamiento de los Strigs y Pchars en Delphi 2010, pero la verdad es que no se me ocurre como solucionarlo. Os agradezco de antemano el tiempo prestado por leer esto e intentar ayudarme. Un saludo |
#2
|
||||
|
||||
Será más fácil que alguien te pueda ayudar si pones el código de la función, no crees?
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
OK. Creo que lo mejor es lo que dices.
Aquí os va part edel código que tiene una clase para tratar un String y poder convertirlo en Pchar para que sea devuleto por la UDF en cuestión.
Ahora la declaración de la UDF
La implemetación de dicha función. Se asume que la variable gResult se ha creado en Initialization section de la DLL.
NOTA: Esto funciona correctamente en Delphi 5 pero no en Delphi 2010 que en vez de devolver la cadena completa solo devuelte el primer elemento de la cadena. |
#4
|
||||
|
||||
Cita:
Para evitar problemas con esto, deberías especificar el tamaño del caracter con el que estás trabajando (2 bytes), como he señalado en negrita. No obstante, puedes mirar en la ayuda de Delphi 2010, ms-help://embarcadero.rs2010/rad/Enabling_Applications_for_Unicode.html Otra buena referencia para trabajar con UNICODE la tienes aqui: http://delphi.about.com/od/objectpas...-in-delphi.htm Salu2
__________________
Progress Openedge https://abevoelker.com/progress_open...dered_harmful/ Delphi forever... |
#5
|
|||
|
|||
Muchas gracias por tu consejo, pero la verdad es que no se ha resuleto el problema con lo que me has comentado.
Hay algo que no he aclarado y es que he hecho una pequeña aplicación de testeo en la que he agregado la unit en la que está programada la función T_AlgoToStr y en ese caso SIEMPRE me ha funcionado bien, el problema es cuando ejecuto una sentencia SQL en el Marathon por ejemplo en la que involucro la función UDF, es solo ahí donde en vez de devolverme la cadena completa, me devuelve solamente la primera letra de la cadena. Aclaro que uns función UDF similar programada en Delphi 5 funciona correctamente. Por otra parte se me ha olvidado poner el ejemplo de la declaración de la función en el firebird 2.1 y es la siguiente:
Intentaré seguir investigando. Pero agradezco cualquier tipo de ayuda, porque me urge el tema. Un saludo |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Hacer que Delphi 2010 luzca como Delphi 7 | jorosmtz | La Taberna | 0 | 11-04-2010 22:45:36 |
Delphi 2010 | tec | Varios | 1 | 19-01-2010 19:05:55 |
Problema Udfs | cincosoft | Firebird e Interbase | 5 | 16-09-2008 23:06:48 |
UDFs Linux | RESP 3.0 | Firebird e Interbase | 2 | 26-01-2006 16:10:44 |
Problemas com UDFs | jwmoreira | Firebird e Interbase | 3 | 17-06-2004 19:53:01 |
![]() |
|