Tôi đang nhận được một số hành vi lạ biên dịch lại một số ứng dụng trong năm 2009 đã sử dụng các chuỗi mở rộng tại các điểm khác nhau.Là WideString giống với Chuỗi trong Delphi 2009
Trong ứng dụng Delphi 2009 là Widestring giống với chuỗi?
Tôi đang nhận được một số hành vi lạ biên dịch lại một số ứng dụng trong năm 2009 đã sử dụng các chuỗi mở rộng tại các điểm khác nhau.Là WideString giống với Chuỗi trong Delphi 2009
Trong ứng dụng Delphi 2009 là Widestring giống với chuỗi?
Không, chúng không phải là không chính đáng.
WideString
chỉ là trình bao bọc cho loại ActiveX/COM BSTR
. Bạn cần nó khi làm việc với các chuỗi trong ActiveX/COM.
String
trong Delphi 2009 trở lên là bí danh cho UnicodeString
, có thể chứa các ký tự Unicode, giống như BSTR
, nhưng không giống như WideString
. WideString
được cấp bởi trình quản lý bộ nhớ COM và không được tính tham chiếu. UnicodeString
được cấp bởi trình quản lý bộ nhớ RTL và được tính tham chiếu, giống như AnsiString
.
Bạn nên sử dụng (Unicode)String
bất cứ khi nào có thể và chỉ sử dụng WideString
cho tương tác COM hoặc xử lý thư viện cũ sử dụng WideString
để hỗ trợ Unicode.
Dường như câu trả lời là here:
Sự thay đổi ngoạn mục nhất trong Delphi 2009 là “chuỗi” loại hiện nay là một bí danh cho UnicodeString thay vì AnsiString.
Xem bài viết này bởi Marco Cantu trong đó vạch ra các hoạt động của chuỗi (ví dụ UnicodeString) trong Delphi 2009:
"Giấy trắng: Delphi và Unicode"
http://dn.codegear.com/article/38980
Về cơ bản, đó là những gì Roddy nói, nhưng phải mất 27 trang để đi vào chi tiết.
Một điều quan trọng khác cần lưu ý là sự khác biệt hiệu suất.
Trong giấy trắng Marco Cantu của (gọi tắt trong câu trả lời moodforaday của) nói:
"WideString đã (và vẫn là) không tài liệu tham khảo tính và cực kỳ kém về hiệu suất và tính linh hoạt (ví dụ, nó sử dụng bộ cấp phát bộ nhớ toàn cục của Windows thay vì FastMM4 gốc). "
Hầu như mọi hướng dẫn nâng cấp cho Delphi 2009 Tôi đã thấy đề xuất bạn chuyển đổi tất cả các chuỗi rộng thành chuỗi.