FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error en Emulación de BDE usando dbExpress
Hola,
Para migrar aplicaciones BDE en Delphi 4 a dbExpress con Delphi 2007 he estado desarrollando una librería que emule los componentes BDE usando como capa interna dbExpress. Mi estrategia ha sido crear componentes con los mismos nombres de los del BDE, que desciendan de sus homólogos dbExpress. Esto me permitiría migrar transparentemente sin necesidad de re-escribir código. Las cosas estaban saliendo bien, la unidad era pequeña (menos de 6k) y el paquete había registrado los componentes TDatabase, TQuery, etc; pero en un momento dado me encontré con una funcionalidad que cambió la forma de almacenarse en los dfm y para corregirla necesito corregir la propia unidad SqlExpr de CodeGear. Para ello pensé que lo mejor era mezclarlo todo en mi unidad, generando una versión grande de la misma; pero al hacerlo, y tratar de instalar de nuevo el paquete, me marca un error diciendo que no puede registrarlos porque otro paquete (el dclBDE100.Bpl, del cual no aparece el fuente) ya ha registrado esos nombres. Lo raro es que siempre que uso la versión pequeña de mi unidad, los componentes se registran bien; es decir, Delphi me permite registrar componentes que tengan el mismo nombre. Yo supongo que lo hace porque están en paquetes distintos y se registran en páginas distintas. Ahora bien, la pregunta es por qué falla al usar la versión grande ?. Yo supongo que de alguna forma, al incorporar directamente a ella referencias a una serie de unidades de la unidad original SqlExpr se está involucrando una referencia a una unidad que requiera del registro de TDatabase y compañía. Busqué en los fuentes Codegear y el único punto de registro de TDataBase y demás es la unidad BDEReg; pero se supone que el paquete dbExpress no debe contener referencias a BDE, luego, qué pasa ?. Alguién tiene una idea. Última edición por rolandoj fecha: 10-09-2007 a las 17:28:32. Razón: Nombre de unidad mal escrito |
#2
|
|||
|
|||
Cual GUID ?
Hola,
Aunque no he encontrado una explicación para este problema, investigando los fuentes de Delphi 2007, encontré un posible camino de solución, aunque no tengo claridad en los detalles para implementarla : Aparentemente, los componentes que nos ocupan son registrados en Windows mediante la rutina GlobalRegisterComponentsProc de la unidad PDPackageLoader. Dado que este es un registro de clases, está asociado a un GUID y por tanto pienso que puede funcionar una técnica para resolver conflictos de nombres cuando se importan librerías de terceros; pero no estoy del todo seguro. La técnica consiste en editar con el block de notas el archivo tlibimp.sym y agregar una sección para mapear los nombres que tengan conflictos. He aquí un ejemplo parcial tomado de ese archivo para el caso MS-Word: ;;==============================================;; ;; Map WinWord CoClasses to better names ;; ;;==============================================;; [{00020905-0000-0000-C000-000000000046}:TypeNames] Application=WordApplication Document=WordDocument El problema que tengo es : cuál GUID debo usar ?. Sin olvidar que sigue siendo válida la pregunta original : Por qué el registro de nombres duplicados funciona bien con la versión pequeña de la unidad y no con la grande ?. Eso me sigue generando dudas respecto a la posible solución encontrada. Agradezco de antemano cualquier ayuda |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
conectar postgresql usando dbexpress | barrauda | Conexión con bases de datos | 4 | 16-07-2007 13:45:04 |
manejo de errores de base de datos usando dbexpress e interbase | ramirezjas | Conexión con bases de datos | 1 | 07-07-2007 21:15:13 |
Error usando wininet | Metalmind | API de Windows | 2 | 13-05-2006 12:03:52 |
Error usando TMemoryStream | Abaddon | Varios | 2 | 04-03-2005 10:59:40 |
|