2008-08-19 11 views
7

In der Firma, die ich arbeite, entwickeln wir die gesamte GUI in C#, aber der Anwendungskernel wurde hauptsächlich in Delphi 5 (aus historischen Gründen) entwickelt, mit vielen Komponenten in COM + . Im Zusammenhang mit diesem sehr speziellen Art von Anwendung ein ich zwei Fragen:Delphi und COM: TLB und Wartungsprobleme

  • Erfahrene Jungs in Delphi und/oder COM, haben Sie irgendwelche workrounds haben mit dem Buggy TLB-Schnittstelle zu arbeiten? Einige der Fehler sind: IDE-Absturz während der Edition eines großen TLB, Verlust von Methoden-IDs, TLB-Korruption usw. Hier haben wir keine gute Lösung gefunden. Eigentlich haben wir versucht, die neue Version 2007 zu aktualisieren. Aber die neue IDE-TLB-Schnittstelle hat die gleichen Fehler, die wir zuvor gefunden haben.

  • Wie steuern Sie TLB-Versionen? Die TLB-Datei ist in einem binären Format und Konfliktlösungen sind sehr schwer zu tun. Wir haben versucht, die Interface-Beschreibungen nach IDL zu exportieren und in CVS zu schreiben, aber wir haben keine gute Möglichkeit gefunden, TLBs aus IDL mit Delphi zu generieren. Außerdem hat das von Microsoft bereitgestellte MIDL-Tool die IDL-Dateien, die wir aus Delphi exportiert haben, nicht korrekt analysiert.

Antwort

10

Ich glaube, Sie 2009

Delphi 2009 hat Änderungen an der COM-Unterstützung, einen guten Blick auf Delphi haben sollte, eine textbasierte Ersatz für die binären TLB-Dateien enthält.

Sie können mehr auf Chris Bensen's blog lesen.

8

In der fernen Vergangenheit (bevor ich anfing für CodeGear zu arbeiten) gab ich die ungerade IDL-Sprache auf, die die IDE präsentierte, und schrieb meine eigene IDL und kompilierte sie mit MS midl. Das hat weitgehend funktioniert; der einzige Catch, IIRC, stellte sicher, dass die Dispids (ID-Attribut) auf den Automatisierungsschnittstellen (Dispatchschnittstellen) für Property Getter & Setter korrekt waren - es gab eine Invariante, die tlibimp erwartete, aber midl garantierte nicht.

Jetzt, da Delphi 2009 eine sichere Teilmenge der Midl-Syntax verwendet und einen Compiler für dieses Midl in der Box enthält und in die IDE integriert ist, sollten diese Probleme der Vergangenheit angehören.

5

Wir haben auch gerade Delphi 2009 installiert und es scheint die Unterstützung für Typelibraries verbessert zu haben. Ich habe jedoch schon eine ganze Weile mit COM und Typbibliotheken gearbeitet und hier sind meine allgemeinen Fehler, die ich über die Jahre gefunden habe. Ich würde seinem hübschen Buggy zustimmen und den ganzen Weg bis zu Delphi 2006 (unsere Version vor 2009) gehen.

  • Immer alle Dateien vor dem Öffnen beschreibbar haben. Dies mag offensichtlich klingen, aber wenn wir mit der Quellcodeverwaltung arbeiten, vergessen wir manchmal, dies zu tun und zu versuchen, das Readonly-Flag nach dem Öffnen einer Datei zu entfernen - Delphi kann damit nicht umgehen. Stellen Sie sicher, dass tlb vor dem Öffnen beschreibbar ist.
  • Wenn Sie eine eigenständige Typbibliothek bearbeiten, MÜSSEN Sie ein Projekt geöffnet haben. Aus irgendeinem Grund, wenn Sie eine Typbibliothek öffnen, wird sie nicht gespeichert. Erstellen Sie ein leeres Projekt und öffnen Sie dann Ihre Typbibliothek. Aus irgendeinem Grund ermöglicht dies die Speicherung der Typbibliothek.
  • Wenn Ihre Typbibliothek von einer Anwendung oder von COM + verwendet wird, vergewissern Sie sich, dass die Anwendung heruntergefahren oder COM + deaktiviert ist, bevor Sie die Typbibliothek öffnen. Alle geöffneten Apps verhindern, dass die Typbibliothek gespeichert wird.

Allerdings denke ich, Ihre beste Lösung ist wahrscheinlich ein Upgrade. Sie erhalten auch Unicode-Unterstützung.

2

Die gleiche Erfahrung mit der TLB-Schnittstelle hier: wir haben einfach aufgehört, es zu verwenden.

Wir arbeiten mit verschiedenen separaten IDL-Dateien (hand-build) für verschiedene Teile unseres Frameworks, verwenden das # include-Konstrukt, um sie in die IDL der tatsächlichen Anwendung aufzunehmen, und generieren dann das einzelne tlb mit MIDL und tlibimp es. Wenn die Anwendung über keine eigene IDL verfügt, sind vorkompilierte Versionen der verschiedenen TLB-Framework-Dateien verfügbar.

Immer wenn das Framework eine neue Version eingibt, wird ein Skript ausgeführt, um die GUIDS auf allen notwendigen Schnittstellen in den IDL-Dateien neu zu generieren.

Dies hat uns viele Jahre gut gedient, und für uns, um das neue Delphi 2009 IDL/TLB-Toolset zu bewegen, muss nicht nur in die IDE integriert werden, sondern auch vielseitig, wenn es um automatisierte Builds geht. Ich kann es kaum erwarten, meine Hände mit einigen Experimenten schmutzig zu machen!

3

Die Verwendung von Delphi 2009 hat großen Teil der großen TLB-Dateien stark beansprucht und die Konvertierung unserer vorhandenen Objekte war problemlos, aber unsere com-Objekte verwenden keine Bibliotheken von Drittanbietern.

Wir werden unsere GUI-Anwendungen migrieren, sobald die Bibliothekshersteller unterstützte Versionen veröffentlichen.