Domanda

Nell'azienda per cui lavoro, sviluppiamo tutta la GUI in C#, ma il kernel dell'applicazione è sviluppato principalmente in Delphi 5 (per ragioni storiche), con molti componenti realizzati in COM+.In relazione a questo tipo di applicazione molto specifico ho due domande:

  • Ragazzi esperti in Delphi e/o COM, avete qualche soluzione alternativa per lavorare con l'interfaccia TLB difettosa?Alcuni dei bug sono:Arresto anomalo dell'IDE durante l'edizione di un TLB di grandi dimensioni, perdita di ID metodi, corruzione TLB, ecc.Qui non abbiamo trovato alcuna buona soluzione.In realtà abbiamo provato ad aggiornare alla nuova versione 2007.Ma la nuova interfaccia IDE TLB presenta gli stessi bug riscontrati in precedenza.

  • Come controlli le versioni TLB?Il file TLB è in formato binario e la risoluzione dei conflitti è molto difficile da eseguire.Abbiamo provato a farlo esportando le descrizioni delle interfacce su IDL e inserendole in CVS, ma non abbiamo trovato alcun buon modo per generare TLB da IDL usando Delphi.Inoltre, lo strumento MIDL fornito da Microsoft non analizzava correttamente i file IDL esportati da Delphi.

È stato utile?

Soluzione

Penso che dovresti dare un'occhiata a Delphi 2009.

Delphi 2009 presenta modifiche al supporto COM, inclusa una sostituzione basata su testo per i file binari TLB.

Puoi leggere di più su Il blog di Chris Bensen.

Altri suggerimenti

In un lontano passato (prima di iniziare a lavorare per CodeGear) ho rinunciato allo strano linguaggio IDL Delphi-ized presentato dall'IDE, ho scritto il mio IDL e l'ho compilato utilizzando MS midl.Questo ha funzionato in gran parte;l'unico problema, IIRC, era assicurarsi che i dispid (attributo id) fossero corretti sulle interfacce di automazione (dispinterfaces) per getter e setter di proprietà: c'era qualche invariante che tlibimp si aspettava ma midl non garantiva.

Tuttavia, ora che Delphi 2009 utilizza un sottoinsieme sicuro della sintassi midl e include un compilatore per questo midl integrato nell'IDE, questi problemi dovrebbero essere un ricordo del passato.

Abbiamo appena installato Delphi 2009 e sembra che sia stato migliorato il supporto per le librerie dei tipi.Tuttavia ho lavorato con COM e le librerie dei tipi per un bel po' di tempo ed ecco i miei trucchi generali che ho trovato nel corso degli anni.Sono d'accordo che sia piuttosto difettoso ed è arrivato fino a Delphi 2006 (la nostra versione prima dell'utilizzo del 2009).

  • Avere sempre ogni file scrivibile prima di aprirlo.Questo può sembrare ovvio, ma quando si lavora con il controllo del codice sorgente a volte ci dimentichiamo di farlo e proviamo a rimuovere il flag di sola lettura dopo aver aperto un file: Delphi non può gestirlo.Assicurarsi che tlb sia scrivibile prima dell'apertura.
  • Se modifichi una libreria di tipi autonoma DEVI avere un progetto aperto.Per qualche motivo, se apri una libreria dei tipi da sola, non verrà salvata.Crea un progetto vuoto e quindi apri la libreria dei tipi.Per qualche motivo ciò consente di salvare la libreria dei tipi.
  • Se la libreria dei tipi viene utilizzata da un'applicazione o da COM+, assicurarsi che l'applicazione sia chiusa o che COM+ sia disabilitato prima di aprire la libreria dei tipi.Qualsiasi app aperta impedirà il salvataggio della libreria dei tipi.

Tuttavia penso che la soluzione migliore sia probabilmente un aggiornamento.Ottieni anche il supporto Unicode.

L'uso di Delphi 2009 ha notevolmente ridotto la fatica derivante dagli enormi file TLB e la conversione dei nostri oggetti esistenti è stata indolore, ma i nostri oggetti com non utilizzano librerie di terze parti.

Migreremo le nostre applicazioni GUI una volta che i fornitori delle librerie rilasceranno le versioni supportate.

Stessa esperienza con l'interfaccia TLB qui:abbiamo semplicemente smesso di usarlo.

Lavoriamo con diversi file IDL separati (costruiti manualmente) per diverse parti del nostro framework, utilizzando il costrutto #include per includerli nell'IDL dell'applicazione reale, quindi generiamo il singolo tlb utilizzando MIDL e tlibimp.Se l'applicazione non dispone di un proprio IDL, sono disponibili versioni precompilate dei diversi file TLB del framework.

Ogni volta che il framework entra in una nuova versione, viene eseguito uno script per rigenerare i GUID su tutte le interfacce necessarie nei file IDL.

Questo ci è stato utile per molti anni e per poter passare al nuovo set di strumenti IDL/TLB di Delphi 2009 dovrà essere non solo integrato nell'IDE, ma anche versatile quando si tratta di build automatizzate e quant'altro.Non vedo l'ora di sporcarmi le mani con qualche esperimento!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top