2008-12-17 4 views

Antwort

26

Nein, sie sind nicht identisch.

WideString ist nur ein Wrapper für den ActiveX/COM BSTR Typ. Sie benötigen es, wenn Sie mit Strings in ActiveX/COM arbeiten.

String in Delphi 2009 und später ist ein Alias ​​für UnicodeString, die Unicode-Zeichen enthalten kann, so wie BSTR tut, aber es ist nicht das gleiche wie WideString. WideString wird vom COM-Speichermanager zugewiesen und nicht als Referenz gezählt. UnicodeString wird vom RTL-Speichermanager zugewiesen und wird als Referenz gezählt, genau wie AnsiString.

Sie sollten wo immer möglich (Unicode)String verwenden und nur WideString für COM-Interop verwenden, oder mit Legacy-Bibliotheken umgehen, die WideString für Unicode-Unterstützung verwenden.

7

Es scheint die Antwort here ist:

Die dramatischste Veränderung in Delphi 2009 ist, dass die „string“ Typ nun ein Alias ​​für Unicode statt Ansistring ist.

4

Sehen Sie dieses Papier von Marco Cantu, die die Funktionsweise der Zeichenfolge (dh Unicode) in Delphi 2009 skizziert:

"White Paper: Delphi und Unicode"

http://dn.codegear.com/article/38980

Im Grunde ist es was Roddy gesagt hat, aber 27 Seiten braucht, um ins Detail zu gehen.

6

Eine andere wichtige Sache zu beachten ist der Leistungsunterschied.

In Marco Cantu Weißbuch (zur Antwort in moodforaday der genannt) sagt:

„Wide ist (und ist noch) nicht gezählt Referenz und ist in Bezug auf Leistung und Flexibilität extrem schlecht (zum Beispiel es verwendet den Windows Global Memory Allocator anstelle des nativen FastMM4). "

Fast jedes Upgrade-Handbuch für Delphi 2009, das ich gesehen habe, empfiehlt, dass Sie alle WideStrings in Strings konvertieren.