2008-08-19 13 views
7

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 + . Relacionados con este tipo muy específico de la aplicación a que dos preguntas:Delphi y COM: TLB y problemas de mantenimiento

chicos
  • experimentados en Delphi y/o COM, ¿tiene algún workrounds para trabajar con la interfaz con errores TLB? Algunos de los errores son: bloqueo de IDE durante la edición de un TLB grande, pérdida de identificación 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 se controlan 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.

Respuesta

10

creo que debe tener un buen aspecto en Delphi 2009.

Delphi 2009 tiene cambios en el soporte COM, incluyendo un reemplazo basado en texto para los archivos binarios de la TLB.

Puede leer más sobre Chris Bensen's blog.

8

En el pasado lejano (antes de empezar a trabajar para CodeGear) abandoné el extraño lenguaje IDL Delphi -ized que presentaba el IDE, y escribí mi propio IDL y lo compilé utilizando MS midl. Esto funcionó en gran medida; el único truco, IIRC, era asegurarse de que los displaids (atributo id) fueran correctos en las interfaces de automatización (dispinterfaces) para los captadores de propiedades & setters - había algo invariante que tlibimp esperaba pero midl no garantizaba.

Sin embargo, ahora que Delphi 2009 usa un subconjunto seguro de la sintaxis midl, e incluye un compilador para este midl en el cuadro e integrado en el IDE, estos problemas deberían ser cosa del pasado.

5

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.

2

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 tlibimp eso. 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 funcionado bien durante muchos años, y para nosotros pasar del 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!

3

El uso de Delphi 2009 ha aliviado en gran medida el 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 la biblioteca publiquen las versiones compatibles.

Cuestiones relacionadas