Frage

In der Firma, in der ich arbeite, entwickeln wir die gesamte GUI in C#, aber der Anwendungskernel wird hauptsächlich in Delphi 5 entwickelt (aus historischen Gründen), wobei viele Komponenten in COM+ erstellt wurden.Im Zusammenhang mit dieser sehr speziellen Art von Anwendung habe ich zwei Fragen:

  • Erfahrene Leute in Delphi und/oder COM, haben Sie irgendwelche Workarounds, um mit der fehlerhaften TLB-Schnittstelle zu arbeiten?Einige der Fehler sind:IDE-Absturz während der Ausgabe eines großen TLB, Verlust von Methoden-IDs, TLB-Beschädigung usw.Hier haben wir keine gute Lösung gefunden.Tatsächlich haben wir versucht, ein Upgrade auf die neue Version 2007 durchzuführen.Aber die neue IDE-TLB-Schnittstelle weist dieselben Fehler auf, die wir zuvor gefunden haben.

  • Wie steuern Sie die TLB-Versionen?Die TLB-Datei liegt in einem Binärformat vor und Konfliktlösungen sind sehr schwierig.Wir haben versucht, die Schnittstellenbeschreibungen nach IDL zu exportieren und in CVS zu übertragen, aber wir haben keine gute Möglichkeit gefunden, TLBs aus IDL mit Delphi zu generieren.Darüber hinaus hat das von Microsoft bereitgestellte MIDL-Tool die IDL-Dateien, die wir aus Delphi exportiert haben, nicht korrekt analysiert.

War es hilfreich?

Lösung

Ich denke, Sie sollten sich Delphi 2009 genauer ansehen.

Delphi 2009 hat Änderungen an der COM-Unterstützung, einschließlich eines textbasierten Ersatzes für die binären TLB-Dateien.

Weitere Informationen finden Sie unter Chris Bensens Blog.

Andere Tipps

Vor langer Zeit (bevor ich anfing, für CodeGear zu arbeiten) habe ich die seltsame Delphi-basierte IDL-Sprache, die die IDE präsentierte, aufgegeben und meine eigene IDL geschrieben und sie mit MS Midl kompiliert.Das hat größtenteils funktioniert;Der einzige Haken, IIRC, bestand darin, sicherzustellen, dass Dispids (ID-Attribut) auf Automatisierungsschnittstellen (Dispinterfaces) für Eigenschafts-Getter und -Setter korrekt waren – es gab eine Invariante, die tlibimp erwartete, Midl jedoch nicht garantierte.

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

Wir haben auch gerade Delphi 2009 installiert und es scheint die Unterstützung für Typelibraries verbessert zu haben.Allerdings arbeite ich schon seit geraumer Zeit mit COM und Typbibliotheken und hier sind meine allgemeinen Fallstricke, die ich im Laufe der Jahre entdeckt habe.Ich würde zustimmen, dass es ziemlich fehlerhaft ist und bis zu Delphi 2006 reicht (unsere Version vor der Verwendung von 2009).

  • Sorgen Sie dafür, dass jede Datei vor dem Öffnen immer beschreibbar ist.Das mag offensichtlich klingen, aber wenn wir mit der Quellcodeverwaltung arbeiten, vergessen wir manchmal, dies zu tun und versuchen, das Readonly-Flag nach dem Öffnen einer Datei zu entfernen – Delphi kann damit nicht umgehen.Stellen Sie vor dem Öffnen sicher, dass tlb beschreibbar ist.
  • Wenn Sie eine eigenständige Typbibliothek bearbeiten, MUSS ein Projekt geöffnet sein.Wenn Sie eine Typbibliothek einzeln öffnen, wird sie aus irgendeinem Grund nicht gespeichert.Erstellen Sie ein leeres Projekt und öffnen Sie dann Ihre Typbibliothek.Aus irgendeinem Grund ermöglicht dies das Speichern der Typbibliothek.
  • Wenn Ihre Typbibliothek von einer Anwendung oder COM+ verwendet wird, stellen Sie sicher, dass die Anwendung heruntergefahren oder COM+ deaktiviert ist, bevor Sie die Typbibliothek öffnen.Alle geöffneten Apps verhindern, dass die Typbibliothek gespeichert wird.

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

Die Verwendung von Delphi 2009 hat die Arbeit mit riesigen TLB-Dateien erheblich vereinfacht, 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 Bibliotheksanbieter unterstützte Versionen veröffentlichen.

Gleiche Erfahrung mit der TLB-Schnittstelle hier:Wir haben einfach aufgehört, es zu verwenden.

Wir arbeiten mit mehreren separaten IDL-Dateien (von Hand erstellt) für verschiedene Teile unseres Frameworks, nutzen das #include-Konstrukt, um sie in die IDL der eigentlichen Anwendung einzubinden, generieren dann die einzelne TLB mit MIDL und tlibimp sie.Wenn die Anwendung über keine eigene IDL verfügt, sind vorkompilierte Versionen der verschiedenen Framework-TLB-Dateien verfügbar.

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

Dies hat uns viele Jahre lang gute Dienste geleistet, und für die Umstellung auf das neue Delphi 2009 IDL/TLB-Toolset muss es nicht nur in die IDE integriert, sondern auch vielseitig einsetzbar sein, wenn es um automatisierte Builds und so weiter geht.Ich kann es kaum erwarten, mir mit ein paar Experimenten die Hände schmutzig zu machen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top