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 |
Será más fácil que alguien te pueda ayudar si pones el código de la función, no crees? ;)
|
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. |
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 |
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 |
La franja horaria es GMT +2. Ahora son las 23:20:33. |
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