Dzisiaj próbuję skompilować mój projekt XE3 w XE4. Pierwszy problem, który napotykam, to metoda Indy'ego FTCPClient.Socket.ReadBytes().Delphi XE4 Indywidualność zgodności między TBytes i TidBytes
Zanim zaakceptował typ TBytes, teraz nalega na TidBytes.
Definicje: TIdBytes = tablica bajtów; TBytes, nie jestem pewien, domyślam się, że to generics coś jak TArray, który jest tablicą bajtów.
Pytanie numer 1: Dlaczego kompilator skarży się, mówiąc, że "[Błąd dcc32] HistoricalStockData.pas (298): E2033 Typy rzeczywistych i formalnych parametrów var muszą być identyczne". Jak widzę, są już identyczne.
Pytanie numer 2: Czy powinienem zmodyfikować mój kod źródłowy za pomocą każdej nowej wersji delphi?
Dzięki.
Biblioteki, które wymyślają własne typy zamiast używać równoważnych typów RTL, prowadzą do gettoizacji. W jaki sposób możemy napisać kod, który używa Indy i jego tablicy bajtów i współdziała z inną biblioteką przy użyciu jej tablicy bajtów? –
Najpierw powiedz Embarcadero, aby przestał łamać własne produkty, gdy wprowadzają zmiany RTL. TBytes był zwykłą tablicą dynamiczną (jak teraz TIdBytes). Udało się to z RTTI, Inspektorem obiektów, kompilatorem itp. Następnie zmienili TBT na TArray i zepsuł to wszystko (zły Generics RTTI, zły codegen C++, itp.). Pamiętaj też, że Indy obsługuje wiele języków, a TArray działa inaczej w C++ niż w Delphi. Było wiele powodów, dla których TIdBytes powróciłby do prostej tablicy dynamicznej. Nie zmieniłem tego lekko, a nawet Embarcadero polecił mi to zrobić w tym czasie. –
OK, jestem pewien, że miałeś dobry powód, żeby się zmienić. W moim odczuciu niesłuszne jest to, że w 2013 r. Nadal trwa debata na temat obsługi tablic bajtowych. "Prawidłowe" rozwiązanie, zakładając, że wszystko może być włączone do działania, byłoby dla wszystkich kodów, aby używać 'TArray' bezpośrednio i dlatego ciesz się specjalnymi regułami kompatybilności typów dla typów ogólnych. Więc w idealnym świecie nie byłoby "TBytes", nie "TIdBytes", a biblioteki mogłyby z powodzeniem współistnieć i współpracować płynnie. –