A kto tu mówi o obejmowaniu każdego projektu i co bardziej istotne jeszcze wszystkich modułów tą dyrektywą?
Ilekroć pojawia się problem z niemożnością kompilacji kodu przeniesionego z Delphi do Lazarusa, pierwszym sugerowanym "rozwiązaniem" jest zmiana dyrektywy kompilatora; Zdarza się to nawet w przypadkach, gdy kod nie jest przenoszony/importowany, tylko po prostu ktoś porzucił Delphi i zaczął pisać pod Lazarusem; A chyba najpopularniejszym tutaj jest przypisywanie metod do pól zdarzeniowych:
FOnClick := OwnOnClick;
No nie działa; Dlaczego? A no dlatego, że dialekt FPC wymaga użycia operatora @
:
FOnClick := @OwnOnClick;
Ale nie - zamiast nauczyć się poprawnego zapisu, lepiej jest zmienić dyrektywę, a tym samym interpretację całego kodu modułu...
Lazarus ma opcję importu projektów z DELPHI, wiem że są pewne istotne różnice w przyjętych konwencjach, biorąc pod uwagę $mode objfpc i $mode delphi, nie rozumiem jednak w czym tu widzisz problem?
W tym, że wielu programistów uważa, że każdy kod dla FPC powinien być interpretowany jak kod dla kompilatora Delphi; I zamiast zasugerować użycie stricte Free Pascalowej konstrukcji, urządza się cyrki z dyrektywami, jakby one były lekiem na wszystkie błędy kompilacji;
[...] zresztą może być też taka opcja, że coś tam trzeba przenieść z DELPHI na Lazarusa, co w tym przypadku może oznaczać problemy nie wynikające wcale z tej dyrektywy.
Do tego celu właśnie jest narzędzie importowania kodu; Dyrektywa {$MODE DELPHI}
istnieje po to, aby jeden kod mógł być kompilowany na dwóch kompilatorach -FPC i Delphi - bez otaczania fragmentów kodu np. dyrektywami {$IFDEF FPC}
czy {$IFDEF DELPHI}
; Tylko w tym przypadku ma to sens, a w innych jest to po prostu obchodzenie problemu na około i ignorancja wobec pewnych odstępstw dialektu FP;
To co zaproponowałem to moim zdaniem tylko i wyłącznie jedna z dwóch opcji, kod się nie kompilował bo nie było domyślnego ustawienia na $mode objfpc.
Jest jeszcze jedna opcja - brak jakiejkolwiek dyrektywy; Sytuacja, gdy nie ma ani {$MODE OBJFPC}
, ani {$MODE DELPHI}
; Wtedy kompilator zachowuje się jak ten z TP7 (albo i jeszcze starszego); I tak samo - jeśli kod ma być copy-paste przenośny na np. TP7 to się nic nie zmienia, ale jeśli nie - używa się standardowej dyrektywy i tym samym aktualnej składni;
Niestety ten jak i wiele innych podobnych wątków i to nie tylko na 4programmers ale i na GL pokazuje, że przejście z DELPHI na Lazarusa wcale nie jest takie proste jakby się to wydawało.
Owszem, nie jest takie proste jakby się to wydawało; Moduł importu projektów z Delphi też posiada wady i często trzeba jeszcze samemu poprawiać kod; Jednak jeśli zna się Free Pascala i jego różność od Delphi to przeniesienie kodu nie będzie już takie trudne; Trzeba wiedzieć gdzie co się znajduje, jakich modułów użyć, jaka składnia jest dopuszczalna dla jednego i drugiego kompilatora i wiele innych rzeczy;
Dlatego też zanim zaproponuje się zmianę dyrektywy, wypadałoby najpierw zrozumieć to w czym tkwi problem; A jedynym problemem w tym wątku jest brak małpek, a nie żadna dyrektywa czy domniemany problem przenośności kodu pomiędzy wymienionymi kompilatorami;
Dlatego też @Patryk27 podał rozwiązanie i tym samym rozwiązał nieistniejący problem; A problem praktycznie nie istniał od początku, bo @kAzek pokazał, że kod zawiera małpki; Więc jakimś cudem musiały zostać usunięte, co przełożyło się na niemożność kompilacji modułu.