13

2009年に、さまざまなポイントでワイドストリングを使用したいくつかのアプリケーションを再コンパイルすると、奇妙な動作が発生します。

Delphi 2009アプリでは、WidestringはStringと同じですか?

4

4 に答える 4

27

いいえ、それらは同一ではありません。

WideStringBSTRActiveX/COMタイプの単なるラッパーです。ActiveX/COMで文字列を操作するときに必要です。

StringDelphi 2009以降では、のエイリアスでUnicodeStringあり、Unicode文字を保持できますがBSTR、と同じではありませんWideStringWideStringCOMメモリマネージャによって割り当てられ、参照カウントされません。 UnicodeStringはRTLメモリマネージャによって割り当てられ、そのまま参照カウントされAnsiStringます。

(Unicode)String可能な限り使用WideStringし、COM相互運用、またはWideStringUnicodeサポートに使用するレガシーライブラリの処理にのみ使用する必要があります。

于 2008-12-17T12:55:11.323 に答える
7

答えはここにあるようです:

Delphi 2009での最も劇的な変更は、「文字列」型がAnsiStringではなくUnicodeStringのエイリアスになったことです。

于 2008-12-17T12:56:06.000 に答える
6

注意すべきもう 1 つの重要な点は、パフォーマンスの違いです。

Marco Cantu のホワイト ペーパー (moodforaday の回答で参照) では、次のように述べています。

「WideString は (今も) 参照カウントされておらず、パフォーマンスと柔軟性の点で非常に貧弱です (たとえば、ネイティブの FastMM4 ではなく Windows グローバル メモリ アロケータを使用しています)。」

私が見たほとんどすべての Delphi 2009 のアップグレード ガイドでは、すべての WideString を String に変換することを推奨しています。

于 2008-12-17T20:48:36.267 に答える
4

Delphi 2009 での文字列(つまり UnicodeString)の仕組みを概説している Marco Cantu によるこの論文を参照してください。

「ホワイト ペーパー: Delphi と Unicode」

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

基本的にはロディが言ったことですが、詳しく説明するには 27 ページかかります。

于 2008-12-17T20:20:52.657 に答える