Jeśli był "przełącznik Ansi" dla Delphi 2009/2010/XE/XE2 (wersje unicode), po prostu wymieniałbyś problem, który masz teraz, z dużo gorszymi problemami.
Z tego powodu nie może być przełącznika. Pomysł ten został dokładnie omówiony, zdaję sobie sprawę z pierwszych rozmów z osobami, które podjęły decyzję, a decyzja o złamaniu kodu nie została podjęta bez należytej staranności. Po prostu nie było innego wyjścia. Aby uczynić Delphi prawdziwie Unicode, konieczne było pseudo String = UnicodeString.
Dlatego trzeba zmienić wszystkie deklaracje String
do AnsiString
i Char
do AnsiChar
jeśli chcesz mieć jednobajtowe non-unicode rodzaje znaków i ciąg w kodzie aplikacji. W większości kodu, a w większości miejsc nie jest to konieczne. Ale tam, gdzie wyraźnie potrzebujesz przetwarzania wielkości bajtów, takich jak protokoły binarne przez RS232 i RS485, lub formaty plików binarnych (EDA itp.), Musisz zmienić swój kod.
Jeśli nie chcesz samodzielnie przesyłać kodu, zapłać komuś, aby to zrobił. Przeniosłem na siebie ogromną bibliotekę komponentów naukowych i aplikacji, a przetestowanie i znalezienie wszystkich błędów zajęło mi kilka tygodni. Później miałem rozsądną, nowoczesną bazę kodów, która nie pękła ponownie od 2009 roku, kiedy dokonałem aktualizacji.
Kiedy dojdziesz do podziału XE/XE2, możesz napotkać trochę więcej bólu związanego z założeniami twojego kodu, że typy wskaźników mają ten sam rozmiar co liczba całkowita lub kardynał, co nie jest już prawdą w Win64. Znowu faceci Delphi nie mają ochoty łamać kodu, po prostu podążają za zdrowymi praktykami inżynierskimi, w tym przypadku Win64 dyktuje pewne rzeczy.
Dlaczego nie zmieniono każdej właściwości sterującej VCL na USTRING zamiast ciągu? Dlaczego nie spowodowały one, że każda funkcja RTL pobiera zarówno USTRING, jak i STRING i zapewnia przeciążenia?
Ponieważ normatywne tworzenie Delphi jest teraz czysto Unicode. USTRING jest i będzie specjalnym przypadkiem. String jest natywnym (normatywnym) typem łańcucha, i tak naprawdę jest on również znany jako UnicodeString
.
Tak się składa, że już używasz aliasu typu. Łańcuchy w delphi 1.0 były ograniczone do 255 znaków. Kiedy wprowadzili Delphi 2.0 i długi typ łańcucha, zwany wewnętrznie AnsiString
, ujednolicili istniejący wspólny typ String jako String=AnsiString
. Kiedy dotarliśmy do Unicode, każdy komponent VCL i każda metoda VCL, która pobiera ciąg nadal pobiera ciąg znaków. Jednak String jest teraz String=UnicodeString
.
Delphi 7 ma już na przykład WideString
. Nie potrzebujemy w połowie drogi do unicode. Niezależnie od tego, czy zdajesz sobie z tego sprawę, czy nie, cały świat oprogramowania oczekuje, że typy łańcuchów będą unicode. Delphi jest częścią globalnego zjawiska. Internet to unikod. Twój system operacyjny Windows 7 to czysty natywny kod.
Delphi ma typy AnsiChar, AnsiString i PAnsiChar w celu obsługi starej funkcjonalności. –
A także jednostkę AnsiStrings. –
Być może zadajesz najczęściej zadawane pytania dotyczące przejścia w standardzie Unicode. Odpowiedź brzmi: "Nie jest tak źle, po prostu przejdź przez to i przenieś swój kod". Prawie każdy komponent komercyjny i open source został przeniesiony 2-3 lata temu. Chodź w wodzie w porządku. –