objects - Delphi y COM: TLB y problemas de mantenimiento
dcom ejemplo (5)
En la empresa que trabajo, desarrollamos toda la GUI en C #, pero el núcleo de la aplicación se desarrolla principalmente en Delphi 5 (por razones históricas), con muchos componentes fabricados en COM +. Relacionado con este tipo de aplicación muy específico, tengo dos preguntas:
Chicos con experiencia en Delphi y / o COM, ¿tiene algún entorno para trabajar con la interfaz TLB defectuosa? Algunos de los errores son: bloqueo de IDE durante la edición de un TLB grande, pérdida de ID de métodos, corrupción de TLB, etc. Aquí, no hemos encontrado ninguna buena solución. En realidad, intentamos hacer una actualización de la nueva versión de 2007. Pero la nueva interfaz IDE TLB tiene los mismos errores que encontramos antes.
¿Cómo controlas las versiones de TLB? El archivo TLB está en formato binario y las resoluciones de conflictos son muy difíciles de hacer. Intentamos exportar las descripciones de interfaces a IDL y comprometernos con CVS, pero no encontramos ninguna buena forma de generar TLB desde IDL usando Delphi. Además, la herramienta MIDL proporcionada por Microsoft no analizó correctamente los archivos IDL que exportamos desde delphi.
Creo que deberías echarle un buen vistazo a Delphi 2009.
Delphi 2009 tiene cambios en el soporte COM, incluido un reemplazo basado en texto para los archivos TLB binarios.
Puedes leer más en el blog de Chris Bensen .
El uso de Delphi 2009 ha quitado gran parte del dolor de los enormes archivos TLB, y la conversión de nuestros objetos existentes no fue fácil, pero nuestros objetos com no utilizan bibliotecas de terceros.
Migraremos nuestras aplicaciones de interfaz gráfica de usuario una vez que los proveedores de bibliotecas lanzan versiones compatibles.
En el pasado distante (antes de que comenzara a trabajar para CodeGear) abandoné el extraño lenguaje IDL Delphi -ized que presentaba el IDE, y escribí mi propio IDL y lo compilé usando MS midl. Esto funcionó en gran medida; la única captura, IIRC, era asegurarse de que los discos (atributo de ID) fueran correctos en las interfaces de automatización (interferencias) para captadores y ajustadores de propiedades; había algo invariante que se esperaba pero no se garantizaba.
Sin embargo, ahora que Delphi 2009 usa un subconjunto seguro de la sintaxis midl, e incluye un compilador para este midl en la caja e integrado en el IDE, estos problemas deberían ser cosa del pasado.
La misma experiencia con la interfaz TLB aquí: simplemente dejamos de usarla.
Trabajamos con varios archivos IDL separados (compilación manual) para diferentes partes de nuestro marco, haciendo uso del constructo #include para incluirlos en el IDL de la aplicación real, luego generamos el tlb único usando MIDL y lo editamos. Si la aplicación no tiene un IDL propio, la versión precompilada de los diferentes archivos TLB de framework está disponible.
Cada vez que el marco entra en una nueva versión, se ejecuta un script para volver a generar los GUIDS en todas las interfaces necesarias en los archivos IDL.
Esto nos ha sido útil durante muchos años, y para nosotros cambiar el nuevo conjunto de herramientas IDL / TLB de Delphi 2009 no solo se integrará en el IDE, sino que también será versátil cuando se trate de construcciones automáticas y otras cosas. ¡No puedo esperar a ensuciarme las manos con algunos experimentos!
También acabamos de instalar Delphi 2009 y parece que ha mejorado el soporte para Typelibraries. Sin embargo, he trabajado con bibliotecas COM y de tipos durante bastante tiempo y aquí están mis errores generales que he encontrado a lo largo de los años. Estoy de acuerdo en que es bastante complicado y está en camino hasta Delphi 2006 (nuestra versión antes de usar 2009).
- Siempre tenga todos los archivos escribibles antes de abrirlos. Esto puede sonar obvio, pero cuando trabajamos con el control de código fuente a veces nos olvidamos de hacer esto y tratamos de eliminar la bandera de solo lectura después de abrir un archivo. Delphi no puede lidiar con esto. Asegúrese de que tlb se pueda escribir antes de abrir.
- Si edita una biblioteca de tipos independiente, DEBE tener un proyecto abierto. Por alguna razón, si abre una biblioteca de tipos por sí sola no se guardará. Crea un proyecto en blanco y luego abre tu biblioteca de tipos. Por alguna razón, esto permite guardar la biblioteca de tipos.
- Si su biblioteca de tipos es utilizada por una aplicación o COM + asegúrese de que la aplicación se cierre o COM + se deshabilite antes de abrir la biblioteca de tipos. Cualquier aplicación abierta evitará que se guarde la biblioteca de tipos.
Sin embargo, creo que su mejor solución es probablemente una actualización. Obtiene soporte Unicode también.