2009-10-02 12 views
5

Zostałem poproszony o ponowne otwarcie projektu, który napisałem w 1998/99 w Delphi 3 i który działa stabilnie od tego czasu. Mam bazę kodu Delphi 3 na starzejącym się komputerze z Windows 98, który istnieje tylko po to, aby utrzymać ten projekt przy życiu. Oczywiście, chciałbym wprowadzić bazę kodu źródłowego do 21 wieku przed podjęciem jakichkolwiek większych zmian.Przenieś projekt z Delphi 3 do Delphi 2010

Zauważam, że Delphi 2010 (obecnie jestem w 2007 roku) twierdzi, że jest w stanie importować projekty z Delphi 2. Czy ktokolwiek ma doświadczenie w importowaniu dużych projektów z Delphi 3? Czy mogę się spodziewać, że będzie to łatwe przejście, czy trudne?

Ponadto oryginalny projekt wykorzystuje komponenty stron trzecich, w tym DBISAM, WPTools i TMS Planner. Zauważam, że wszystkie te są nadal dostępne dla najnowszej wersji Delphi. Zakładając, że najpierw zainstaluję nowe wersje w Delphi 2010, czy mogę oczekiwać, że części mojej aplikacji, które używają tych komponentów, również zostaną przetłumaczone? Wiem, że przynajmniej WPTools zmienił niektóre ze swoich komponentów i interfejsów od wersji używanej w pierwotnej aplikacji i oczywiście będę miał do tego jakieś kodowanie, ale niepowodzenie tych części programu zapobiegnie mojej podstawie kodu z być w ogóle ulepszonym?

+0

Najpierw powinieneś najpierw ocenić, czy rekompilacja z Delphi 2010 naprawdę przyniesie aplikację "do 21 wieku". Nowoczesna aplikacja korzysta z najnowszych kontrolek i okien dialogowych (w stylu Vista), dzięki czemu wygląda zupełnie inaczej, obsługuje style wizualne, współpracuje z ograniczonymi kontami użytkowników, właściwie obsługuje Unicode (to znacznie więcej niż w przypadku kompilacji z Delphi 2009+), nie ma ciężkiej pracy -kodowane ścieżki, ... Może jest tak wiele do zmienienia i naprawienia, że ​​przepisanie z Delphi 2010 jest lepszą propozycją? – mghie

+3

@mghie Możliwe, że jego plany przyniosą kod źródłowy do D2010 w celu ujednolicenia środowiska programistycznego i przyzwyczajenia się do niego przed przylotem na przeróbkę lub ciężkie zmiany. –

+0

Będę musiał napisać coś do zrobienia w każdym przypadku, ponieważ oryginalny kod (sam go napisałem) nie jest świetny. Nadal chcę wiedzieć, że mogę uzyskać działającą wersję programu w stosunkowo krótkim czasie, stamtąd będę przepisywać zgodnie z projektem. Unicode nie jest tak ważny, jest to aplikacja biznesowa dla firmy, której działalność jest ściśle związana z prawem jednego amerykańskiego stanu. –

Odpowiedz

6

Przeprowadzenie tej migracji powinno być bardzo możliwe, a w zależności od sposobu napisania kodu może być bolesne lub bezbolesne. Niestety nie jest łatwo powiedzieć, do momentu rozpoczęcia procesu migracji.

Pierwszą rzeczą, jaką zrobiłbym, byłoby upewnienie się, że WSZYSTKIE pliki DFM są konwertowane na ich reprezentację tekstową. Uważam, że został ustawiony domyślnie w późniejszych wersjach Delphi, ale jak pamiętam, Delphi 3 używał formatu binarnego. Powinien istnieć plik narzędziowy o nazwie DFMConvert lub coś w katalogu bin delphi 3, który umożliwia przekonwertowanie pliku DFM na tekst. Powodem, dla którego chcesz to zrobić, jest upewnienie się, że możesz odczytać źródło, jeśli musisz przeprowadzić ręczną edycję DFM z powodu braku załadowania komponentu. Nie tylko przeskakujesz wersje Delphi, ale także przeskakujesz wersje KAŻDEGO komponentu, którego używasz, i może być kilka niezgodności, które mogą spowodować, że komponent nie załaduje się. Znalazłem, jeśli tak jest, i masz "nową" wersję, a następnie użyj bezpośrednio edytuj źródło DFM i porównaj formularz testowy z komponentem, który zawiera, z wersją starą. Usuń wszystko (lub zmień nazwę), które jest nie na miejscu, a następnie spróbuj ponownie załadować formularz.

Jak wspomniano w Frabricio, jeśli używasz wariantów, musisz wprowadzić drobne poprawki do klauzuli "uses".

Dobrą wiadomością jest to, że sam kod powinien działać poprawnie po poprawieniu klauzuli komponentów/zastosowań. Jeśli przejdziesz bezpośrednio do Delphi 2010, Twoim jedynym innym problemem będzie Unicode, a kompilator wykona fantastyczną robotę, wskazując je wszystkim za pomocą błędów i ostrzeżeń.

+0

Thx. WRT do "może być kilka niezgodności, które mogą spowodować, że komponent się nie załaduje", czy możesz wymienić takie niekompatybilności, jakich doświadczyłeś? –

+0

Jednym z takich nieporozumień byłaby zmiana właściwości, w której nowy składnik albo zmienił nazwę nieruchomości, albo już jej nie obsługuje. Spowoduje to błąd podczas ładowania formularza z błędem, który potencjalnie usunie komponent z formularza. Edytując ręcznie DFM, możesz poprawić zachowanie i całkowicie załadować formularz. – skamradt

+3

Narzędzie do konwersji plików dfm nazywa się "konwertuj". – dummzeuch

5

Ponieważ masz D2007 i zakładasz, że wszystkie te zestawy są dostarczane z D2007 dcus, będę radzę ci najpierw spróbować ponownie otworzyć kod na D2007. A następnie przejdź do D2010 z powodu funkcji Unicode rzeczywistego VCL - co może spowodować problemy z migracją (o których nie będę tutaj dyskutować, ponieważ jest to głęboko omawiane w Internecie i here on SO).

Powiedziałbym, że ponieważ gdzieś pomiędzy D5 i D7 (nie zapisuję dokładnie) nastąpiła reorganizacja jednostki rtl (wraz z utworzeniem jednostki Variants.pas i wieloma jednostkami OTAPI zmieniły nazwy, itp.). Tak będzie, gdy pojawią się pierwsze problemy. EDYCJA: Przeniesiono nie tylko Warianty, ale również wiele integracji z IDE - aby uniknąć stosowania nielicencjonowanego kodu, aby wdrożyć. Jeśli masz kod OTAPI (na przykład kod zezwalający na publikowanie właściwości na formularzach dziedziczonych), musisz go przenieść do projektu pakietu.

Jak skramradt powiedział, można mieć do czynienia z binarnym DFM rzeczy ....

Po tym, jeśli wszystko działa, przejdź do rzeczy Unicode. W zależności od aplikacji może być łatwe lub nie. Dla moich nie jest to wielka irytacja. Ale wiem, że inni mają większe problemy z tym niż ja.

+0

Ale rozumiem, że nie ma nadziei, że projekt D3 zostanie otwarty nawet w D2007, podczas gdy D2010 twierdzi, że jest w stanie to zrobić. Zakładam, że refaktoryzacja zmienionego RTL jest częścią procesu aktualizacji D2010. –

+0

Zarówno D2007, jak i D2010 otworzą projekty D3 lub przynajmniej * powinny * je otworzyć. –

+0

Thx. Czy źle zrozumiałem, że funkcja importowania w poprzedniej wersji jest nowa w D2010? –

3

Dla pewności, niedawno przekonwertowałem oprogramowanie, które rozwijam z Delphi 4 na Delphi 2009, aby uzyskać możliwości Unicode, i miałem wiele problemów, ale wszystkie były rozwiązane w ciągu kilku tygodni.

Jedna uwaga: jeśli korzystasz z pakietów zewnętrznych, upewnij się, że dostępna jest wersja Delphi 2010, którą możesz zaktualizować przed konwersją. Delphi 2009 byłby w porządku, ale nie starałbym się używać starszych pakietów w D2010.

0

Potwierdzam, co mówią inni: konwersja aplikacji D3 na D2010 jest zwykle łatwa w odniesieniu do własnego kodu.

Widzę dwa problemy:

  1. Użyłeś String jako ogólnego bufora, przechowywanie coś innego niż znaków.
  2. Twój kod zakłada, że ​​sizeof (char) to 1, to znaczy użyj Length(), gdy powinieneś używać SizeOf() lub odwrotnie.

Najtrudniejszą częścią są komponenty innych producentów.

Wygląda na to, że wszystkie używane elementy nadal istnieją dla D2010, to dobrze. Ale jest prawdopodobne, że ich interfejs został zmieniony i oczywiście będzie wymagał pewnych zmian w kodzie.

0

Mam grupę projektową Delphi 7, którą Delphi 2010 łatwo zmodernizować. Niestety, podczas następnego uruchomienia z nowo utworzonymi plikami grupy projektów Delphi 2010, IDE po prostu ulega awarii i znika po załadowaniu projektu. Nie są wyświetlane żadne wyjątki, nie są wyświetlane komunikaty o błędach. Moje obejście polega na tym, że cały czas korzystam z pliku Delphi 7 i pozwalam Delphi 2010 ulepszać, co mu się żywnie podoba, bez korzystania z nowo utworzonych plików projektu.

+0

Czy próbowałeś ponownie utworzyć projekt w D2010? To znaczy. pozwól Delphi utworzyć nowy projekt, a następnie dodaj wszystkie jednostki i ustaw wszystkie opcje projektu w razie potrzeby. –

1

Nie mogę powiedzieć wiele na temat migracji D3 do D2010, ale z powodzeniem przeprowadziłem migrację D6 do D2010. Najpierw upewniłem się, że wszystkie komponenty stron trzecich używane w D3 są również dostępne w D2010. Rekompiluj dowolne niestandardowe komponenty z D6 do D2010. Załadowałem mój kod źródłowy D6 i skompilowałem. Obsługuje wszystkie problemy z Unicode. Obsłużyć wszystkie błędy kompilatora jeden po drugim ... wszystko odbywa się w około 3 dni (ok 30000 linii kodu)

4

Oto kilka uwag zrobiliśmy dotyczące modernizacji do Delphi 2010

  1. wykonywalnych zachowane w Delphi2010 to około 3 razy więcej bajtów niż te skompilowane przez Delphi3.
  2. Każda kompilacja spowoduje powstanie większej ilości ostrzeżeń i wskazówek niż Delphi3. Dobra praktyka polega na usunięciu wszystkich wskazówek i ostrzeżeń.
  3. Znalazłem kilka uszkodzonych plików Pascala, które kompilują dobrze w Delphi3, ale nie w Delphi2010. Wizualnie nie pojawiają się żadne problemy ani różnice. Jednak błędy kompilacji wyraźnie wskazują błąd na niewłaściwym numerze linii. W moich przykładach problem był związany z CR/LF, w moim Delphi był tylko CR. Trudny problem do rozwiązania i wastera w czasie rzeczywistym. Jednak tekst może być wyświetlany w Notatniku lub przy użyciu programu WinHex.exe. Napisałem program o nazwie PARSER.EXE, który pozwala zidentyfikować te znaki kontrolne.Jest to najlepszy sposób na edycję tych plików w Notatniku, gdy wiesz, gdzie znajdują się znaki kontrolne.
  4. AnsiString. Delphi 2010 teraz używa AnsiStrings, MBCS i WideStrings, (UniCode). W przeciwieństwie do Delphi 3, który używał łańcuchów ASCII. Standardowa implementacja Delphi 2010 używa łańcuchów jako Unicode i Chars jako 16-bitowych znaków. Obecnie konieczne jest zapewnienie, że wiele 8-bitowych łańcuchów ASCII jest zdefiniowanych jako AnsiStrings. Oczywiście starsze biblioteki dll, które miały interfejsy zdefiniowane w PChars, teraz wymagają PAnsiChar.
  5. Kod nie jest wymienny między platformami Delphi z następujących powodów:
  6. Delphi 2010 ma dodatkowe funkcje i typy zmiennych, takie jak AnsiChar, AnsiStrings.
  7. Formularze nie są zgodne między wersjami, ponieważ ostatnie wersje Delphi mają dodatkowe właściwości.
  8. Dcus nie są kompatybilne między wersjami.
  9. Pakiety nie są kompatybilne między wersjami. W Delphi 2010 nie ma Crystal Reports, więc może być konieczne zakupienie tego osobno. Wszelkie inne używane pakiety mogą również wymagać aktualizacji po kosztach.
  10. Wiele funkcji, takich jak Readfile, Writefile, GettickCount, teraz wymaga parametrów jako DWORD, podczas gdy Delphi3 jest bardziej tolerancyjny. Niektóre z tych funkcji są powiązane z większą pojemnością dysków.
  11. Menu podręczne. Mają nową właściwość o nazwie AUTOHOTKEY. To powinno być ustawione na ręczne. Jeśli ta opcja zostanie ustawiona jako domyślna, napisy będą miały wstawioną wartość "&", aby zapewnić funkcję klawiszy skrótu.
  12. Kursory. Zmieniła się metoda korzystania z kursorów.
  13. Wygląda na to, że Delphi2010 ma całą kupę więcej funkcji, które zostały dodane kosztem prostszego użycia. Prawdopodobnie Delphi 3 miał lepszy i łatwiejszy w obsłudze interfejs.
  14. Pomoc. Może lepiej niż Delphi 3. Ale wydaje się, że znikają przez kilka minut, próbując znaleźć pomoc. Interaktywna pomoc jest uciążliwa.
  15. BorlandMM.dll nie działa w systemie Windows 2000 z aplikacjami Delphi 2010. Więc możesz potrzebować aktualizacji obciążenia komputerów, jeśli chcesz korzystać z tej biblioteki DLL.

Mam około 100 bibliotek aplikacji i serwerów COM do aktualizacji. Prawdopodobnie około 12 tygodni pracy z uruchomieniem. Mam nadzieję że to pomoże.

Powiązane problemy