5

プロジェクトを Delphi 4 から Delphi XE2 に移植しようとしています。shortstringプロジェクトで使用する要件があります。Delphi ヘルプによると、$H- は、コンパイラがstring型に短い文字列を使用するようにする必要があります。このディレクティブを使用しましたが、違いはありません。私は小さなテストプログラムを書きました:

program Stringtest;

{$APPTYPE CONSOLE}

{$R *.res}
{$H- }
uses
  System.SysUtils;

var
 str : string;
 short : shortstring;
begin
  try
    str := 'testing';
    short := 'testing';
    Writeln('str ' +Format('%d', [sizeOf(str)]) );
    Writeln('short  ' +Format('%d', [sizeOf(short)])  );
    Readln; 
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

私の意見では、出力は両方で同じである必要がありstrshortコンパイラは両方をshortstring. ただし、サイズは 4strと 256 ですshort。ソースコード内のすべての出現を置き換える唯一の解決策 として、コンパイラに処理stringさせる他の方法はありますか?shortstringstringshortstring

4

1 に答える 1

7

$H- はレガシーであり、下位互換性のためにのみ提供されています。Delphi XE2(または D2009 以降の Delphi コンパイラの任意のバージョン)で、デフォルトの文字列型として Unicode を使用しないようにする方法はありません。

コンパイラ ディレクティブは、コンパイル時に古いコードが壊れないようにするためだけに残っています。Delphi 2009 がデフォルトの文字列型として Unicode のみを使用してリリースされ、AnsiString をデフォルトに戻すスイッチがなかったとき、ちょっとした騒動がありました。RTL、VCL などの 2 つの異なるバージョンが必要なため、これは事実上不可能であると判断したと説明されました。ShortString をデフォルトにするには、同じことが必要です。

すべての文字列参照を明示的に shortstring に変更する必要があります (または、それらを必要としないようにコードを修正することをお勧めします)。

于 2012-03-06T16:43:20.743 に答える