2009-10-02 12 views
5

Mi è stato chiesto di riaprire un progetto che ho scritto nel 1998/99 in Delphi 3 e che è stato gestito stabilmente da allora. Ho la base di codice Delphi 3 su una macchina Windows 98 che esiste solo per mantenere vivo questo progetto. Ovviamente, mi piacerebbe portare la base del codice sorgente nel 21 ° secolo prima di intraprendere importanti revisioni.Spostare il progetto da Delphi 3 a Delphi 2010

Mi rallegro felicemente che Delphi 2010 (sono attualmente nel 2007) afferma di essere in grado di importare progetti da Delphi 2 in poi. Qualcuno ha qualche esperienza nell'importazione di grandi progetti da Delphi 3? Posso aspettarmi che questa sia una transizione facile o difficile?

Inoltre, il progetto originale utilizza componenti di terze parti tra cui DBISAM, WPTools e TMS Planner. Prendo atto che tutti questi sono ancora disponibili per l'ultima versione di Delphi. Supponendo che prima installi le nuove versioni in Delphi 2010 posso aspettarmi che anche le parti della mia applicazione che usano questi componenti vengano tradotte? So che almeno WPTools ha cambiato alcune delle sue strutture e interfacce dei componenti dalla versione utilizzata nell'applicazione originale e ovviamente avrò qualche ricodifica da fare lì, ma il fallimento di quelle parti del programma impedirà il mio codice base da essere aggiornato a tutti?

+0

Si dovrebbe valutare innanzitutto se una ricompilazione con Delphi 2010 porterà realmente l'app "nel 21 ° secolo". Un'app moderna utilizza i controlli recenti e i dialoghi (in stile Vista) e quindi ha un aspetto completamente diverso, supporta stili visivi, funziona con account utente limitati, supporta correttamente Unicode (che è molto più che compilare con Delphi 2009+), non ha problemi percorsi codificati, ... Forse c'è così tanto da cambiare e correggere che una riscrittura con Delphi 2010 è una proposta migliore? – mghie

+3

@mghie Forse il suo piano è quello di portare il codice base su D2010 per unificare l'ambiente di sviluppo e abituarsi ad esso prima dell'avventura su una riscrittura o su pesanti cambiamenti. –

+0

Avrò qualche riscrittura da fare in ogni caso dal momento che la base di codice originale (l'ho scritta io stesso) non è eccezionale. Tuttavia, voglio sapere che posso ottenere una versione funzionante del programma in un tempo relativamente breve, da lì riscriverò come il progetto consente. Unicode non è così importante, questa è un'applicazione line-of-business per un'azienda la cui attività è strettamente legata alle leggi di un singolo stato americano. –

risposta

6

Dovrebbe essere molto possibile eseguire questa migrazione e, a seconda di come è stato scritto il codice, può essere doloroso o indolore. Sfortunatamente non è facile dirlo fino a quando non inizi la procedura di migrazione.

La prima cosa che vorrei fare è assicurarsi che TUTTI i file DFM siano convertiti nella loro rappresentazione testuale. Questo credo sia stato impostato di default nelle versioni successive di Delphi ma, come ricordo, Delphi 3 ha usato un formato binario. Dovrebbe essere presente un file di utilità denominato DFMConvert o qualcosa nella directory delphi 3 bin che consente di convertire un DFM in testo. Il motivo per cui lo vuoi fare è assicurarti di poter leggere il codice sorgente se devi eseguire una modifica manuale del DFM a causa del mancato caricamento di un componente. Non solo stai saltando le versioni di Delphi, ma stai anche saltando le versioni di OGNI componente che usi e potrebbero esserci alcune incompatibilità che potrebbero causare il mancato caricamento di un componente. Ho trovato se questo è il caso e si dispone di una "nuova" versione, quindi utilizzare la modifica del sorgente DFM direttamente e confrontare un modulo di test con il componente su di esso rispetto a ciò che contiene la versione precedente. Rimuovere qualsiasi cosa (o rinominare) che è fuori luogo e quindi tentare di caricare nuovamente il modulo.

Come menzionato da Frabricio, se si utilizzano varianti, sarà necessario apportare piccole modifiche alla clausola sugli usi.

La buona notizia è che il codice stesso dovrebbe funzionare correttamente una volta corretta la clausola relativa ai componenti/usi. Se vai direttamente a Delphi 2010, il tuo unico altro problema sarebbe Unicode e il compilatore fa un ottimo lavoro di indicarli tutti via errori e avvertimenti.

+0

Thx. WRT to "ci possono essere alcune incompatibilità che possono causare il fallimento del caricamento di un componente", puoi menzionare eventuali incompatibilità che hai riscontrato? –

+0

Una tale incomprensione sarebbe una modifica di proprietà in cui il nuovo componente ha rinominato la proprietà o non la supporta più. Ciò genererà un errore durante il caricamento del modulo con un errore che potenzialmente rimuoverà il componente dal modulo. Modificando manualmente il DFM puoi correggere il comportamento e caricare completamente il modulo. – skamradt

+3

L'utilità di conversione file dfm si chiama "convert". – dummzeuch

5

Come in D2007 e supponendo che tutti questi set di componenti siano dotati anche di D2007 dcus, mi verrà suggerito di provare prima a riaprire la base di codici su D2007. Quindi, andare a D2010 a causa della caratteristica Unicode dell'effettiva VCL, che può creare alcuni problemi di migrazione (che non discuterò qui perché è ampiamente discusso sul web e here on SO).

Direi che poiché da qualche parte tra D5 e D7 (non registrare esattamente) è avvenuta una riorganizzazione dell'unità del rtl (con la creazione dell'unità Variants.pas e molte unità OTAPI hanno cambiato nomi, ecc.). Così sarà dove nasceranno i tuoi primi problemi. EDIT: non solo le varianti sono state trasferite, ma anche molta integrazione con l'IDE, per evitare che il codice non licenziato venga distribuito. Se si dispone di un codice OTAPI (ad esempio, codice che consente le proprietà pubblicate su moduli ereditati), sarà necessario spostarlo in un progetto di pacchetto.

Come skramradt detto, si può avere a che fare con il binario cosa DFM ....

Dopo di che, se tutte le opere, andare alla cosa Unicode. A seconda dell'app, può essere facile o no. Per i miei, non di grande fastidio. Ma so che ci sono altri che affrontano problemi più grandi di me.

+0

Ma la mia comprensione è che non c'è speranza che un progetto D3 possa essere aperto anche in D2007 mentre D2010 afferma di essere in grado di farlo. Presumo che il refactoring per la RTL modificata sia parte del processo di aggiornamento di D2010. –

+0

Sia D2007 che D2010 apriranno progetti D3, o almeno * dovrebbero * aprirli. –

+0

Thx. Ho frainteso che la funzionalità di importazione della versione precedente fosse nuova in D2010? –

3

Solo per rassicurarti, di recente ho convertito il software che sto sviluppando da Delphi 4 a Delphi 2009 per ottenere funzionalità Unicode e ho avuto un certo numero di problemi, ma sono stati tutti risolvibili entro un paio di settimane.

Una cosa da notare: se si utilizzano pacchetti di terze parti, assicurarsi di disporre di una versione di Delphi 2010 che è possibile aggiornare prima della conversione. Delphi 2009 andrebbe bene, ma non proverei a usare vecchi pacchetti in D2010.

0

Confermo quello che dicono gli altri: la conversione di un'applicazione D3 in D2010 è solitamente semplice per quanto riguarda il proprio codice.

vedo due difficoltà:

  1. Si è utilizzato come buffer String generale, la memorizzazione di qualcosa di diverso da caratteri.
  2. Il codice presume che sizeof (char) sia 1, cioè utilizza Length() quando SizeOf() deve essere utilizzato o il contrario.

La parte più difficile sono i componenti di terze parti.

Sembra che tutti i componenti in uso siano ancora disponibili per D2010, che è un buon punto. Ma è probabile che la loro interfaccia sia stata cambiata e ovviamente richiederà alcune modifiche al codice.

0

Ho un gruppo di progetto Delphi 7 che Delphi 2010 ha prontamente aggiornato. Sfortunatamente, durante il prossimo avvio con i file del gruppo di progetto Delphi 2010 appena creati, l'IDE si blocca e scompare dopo aver caricato il progetto. Non vengono visualizzate eccezioni, nessun messaggio di errore . La mia soluzione alternativa è quella di utilizzare sempre il file Delphi 7 e consentire a Delphi 2010 di eseguire l'aggiornamento a proprio piacimento senza utilizzare i file di progetto appena creati.

+0

Hai provato a ricreare manualmente il progetto in D2010? Cioè lascia che Delphi crei un nuovo progetto e in seguito aggiungi tutte le unità e imposta tutte le opzioni del progetto secondo necessità. –

1

Non posso dire molto sulla migrazione da D3 a D2010, ma recentemente ho migrato da D6 a D2010 con successo. Per cominciare, quello che ho fatto è stato assicurarsi che tutti i componenti di terze parti che hai utilizzato in D3 siano disponibili anche in D2010. Ricompilare qualsiasi componente personalizzato da D6 a D2010. Ho caricato il mio codice sorgente D6 e compilato. Gestire tutti i problemi Unicode. Gestire tutti gli errori di compilazione ad uno ad uno ... tutto fatto in circa 3 giorni (circa 30000 linee di codice)

4

Qui ci sono alcune note che abbiamo fatto per quanto riguarda l'aggiornamento a Delphi 2010

  1. Gli eseguibili rispettate in Delphi2010 sono circa 3 volte più byte di quelli compilati da Delphi3.
  2. Qualsiasi compilazione genererà un mucchio di avvertimenti e suggerimenti in più rispetto a Delphi3. Una buona pratica è rimuovere tutti i suggerimenti e gli avvertimenti.
  3. Ho trovato diversi file Pascal corrotti che compila bene in Delphi3 ma non in Delphi2010. Visivamente non ci sono problemi o differenze. Tuttavia, gli errori di compilazione indicano chiaramente l'errore sul numero di riga errato. Nei miei esempi il problema era relativo a CR/LF, nel mio Delphi c'era solo un CR. Un problema difficile da risolvere e una perdita di tempo reale. Tuttavia, il testo potrebbe essere visualizzato in Blocco note o utilizzando WinHex.exe. Ho scritto un programma chiamato PARSER.EXE, che consente di identificare questi caratteri di controllo.Questo è il modo migliore per modificare questi file nel Blocco note una volta che sai dove sono i caratteri di controllo.
  4. AnsiString. Delphi 2010 ora utilizza AnsiStrings, MBCS e WideStrings (UniCode). Al contrario di Delphi 3 che usava le stringhe ASCII. L'implementazione standard di Delphi 2010 utilizza stringhe come Unicode e Chars come caratteri a 16 bit. Ora è necessario assicurarsi che molte stringhe ASCII a 8 bit siano definite come AnsiStrings. Ovviamente le DLL meno recenti che avevano interfacce definite con PChars ora richiedono PAnsiChar.
  5. Il codice non è intercambiabile tra le piattaforme Delphi per i seguenti motivi
  6. Delphi 2010 ha funzioni aggiuntive e tipi di variabili come AnsiChar, AnsiStrings.
  7. I moduli non sono compatibili tra le versioni poiché le ultime versioni di Delphi hanno proprietà aggiuntive.
  8. I dcus non sono compatibili tra le versioni.
  9. I pacchetti non sono compatibili tra le versioni. Non ci sono Crystal Reports in Delphi 2010 quindi potrebbe essere necessario acquistarlo separatamente. Qualsiasi altro pacchetto che è stato utilizzato potrebbe richiedere anche l'aggiornamento, al costo.
  10. Molte funzioni, come Readfile, Writefile, GettickCount ora insistono sui parametri come DWORD, mentre Delphi3 era più tollerante. Alcune di queste funzioni sono associate a capacità disco superiori.
  11. Menu popup. Questi hanno una nuova proprietà chiamata AUTOHOTKEY. Questo dovrebbe essere impostato su manuale. Se impostato come predefinito, i sottotitoli avranno "&" inserito per fornire la funzionalità dei tasti di scelta rapida.
  12. Cursori. Il metodo per l'utilizzo dei cursori è cambiato.
  13. Sembra che Delphi2010 abbia un intero mucchio di altre funzionalità che sono state aggiunte a spese di renderlo più semplice da usare. Probabilmente Delphi 3 aveva un'interfaccia migliore e più facile da usare.
  14. Help. Forse meglio di Delphi 3. Ma sembra scomparire per qualche minuto cercando di trovare informazioni di aiuto. L'aiuto interattivo è una seccatura.
  15. BorlandMM.dll non funziona su Windows 2000 con applicazioni Delphi 2010. Quindi potresti dover aggiornare un carico di PC se vuoi usare questa dll.

Ho circa 100 applicazioni dll e server COM da aggiornare. Probabilmente circa 12 settimane di lavoro con la messa in servizio. Spero che questo ti aiuti.