Pregunta

En la empresa en la 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+.En relación con este tipo de aplicación tan específica, tengo dos preguntas:

  • Chicos con experiencia en Delphi y/o COM, ¿tienen alguna solución para trabajar con la interfaz TLB con errores?Algunos de los errores son:IDE falla 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.De hecho, intentamos actualizar la nueva versión 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 la resolución de conflictos es muy difícil.Intentamos hacerlo exportando las descripciones de las interfaces a IDL y comprometiéndolas en CVS, pero no encontramos ninguna buena manera 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.

¿Fue útil?

Solución

Creo que deberías echarle un buen vistazo a Delphi 2009.

Delphi 2009 tiene cambios en la compatibilidad con COM, incluido un reemplazo basado en texto para los archivos binarios TLB.

Puedes leer más en El blog de Chris Bensen..

Otros consejos

En el pasado lejano (antes de comenzar a trabajar para CodeGear), abandoné el extraño lenguaje IDL basado en Delphi que presentaba el IDE, escribí mi propio IDL y lo compilé usando MS midl.Esto funcionó en gran medida;el único inconveniente, IIRC, era asegurarse de que los dispids (atributo de identificación) fueran correctos en las interfaces de automatización (dispinterfaces) para los captadores y definidores de propiedades; había algunas invariantes que tlibimp esperaba, pero midl no garantizaba.

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

También acabamos de instalar Delphi 2009 y parece haber mejorado el soporte para bibliotecas de tipos.Sin embargo, he trabajado con COM y bibliotecas 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 tiene bastantes errores y llega hasta Delphi 2006 (nuestra versión anterior a usar 2009).

  • Siempre permita que todos los archivos se puedan escribir antes de abrirlos.Esto puede parecer obvio, pero cuando trabajamos con control de fuente a veces nos olvidamos de hacerlo e intentamos eliminar el indicador de solo lectura después de abrir un archivo; Delphi no puede lidiar con esto.Asegúrese de que se pueda escribir en tlb antes de abrirlo.
  • 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á.Cree un proyecto en blanco y luego abra su 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 esté cerrada o COM+ deshabilitado antes de abrir la biblioteca de tipos.Cualquier aplicación abierta impedirá que se guarde la biblioteca de tipos.

Sin embargo, creo que su mejor solución es probablemente una actualización.También obtienes soporte Unicode.

El uso de Delphi 2009 ha eliminado en gran medida la molestia de los enormes archivos TLB, y la conversión de nuestros objetos existentes fue sencilla, pero nuestros objetos com no utilizan bibliotecas de terceros.

Migraremos nuestras aplicaciones gui una vez que los proveedores de la biblioteca lancen versiones compatibles.

La misma experiencia con la interfaz TLB aquí:simplemente dejamos de usarlo.

Trabajamos con varios archivos IDL separados (construidos manualmente) para diferentes partes de nuestro marco, haciendo uso de la construcción #include para incluirlos en el IDL de la aplicación real, luego generamos el tlb único usando MIDL y tlibimp.Si la aplicación no tiene un IDL propio, hay disponibles versiones precompiladas de los diferentes archivos TLB del marco.

Cada vez que el marco ingresa a 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 de gran utilidad durante muchos años, y para que podamos pasar al nuevo conjunto de herramientas IDL/TLB de Delphi 2009, no sólo tendrá que estar integrado en el IDE, sino también ser versátil cuando se trata de compilaciones automatizadas y demás.¡No puedo esperar para ensuciarme las manos con algunos experimentos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top