私はDelphi 4からDelphi XE2にプロジェクトを移植しようとしています。私はプロジェクトでshortstring
を使用する必要があります。 Delphiヘルプによれば、$ H-は、コンパイラにstring
タイプのショートストリングを使用させるべきです。私はこの指令を使用しましたが、違いは見られません。コンパイラはshortstring
の両方として扱う必要があるため、出力がstr
とshort
の両方で同じにする必要があります私の意見ではショートストリング用のDelphiコンパイラ指令は機能しませんか?
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.
:私は小さなテストプログラムを書いています。サイズはstr
では4、short
では256です。コンパイラにshortstring
としてstring
を処理させる方法はありますか?string
のすべてのコードをshortstring
に置き換える唯一の解決策はソースコードですか?
'$ H-'は旧式であり、下位互換性のためにのみ提供されています。 Delphi XE2(またはD2009以上のDelphiのコンパイラの任意のバージョン)がUnicodeをデフォルトの文字列型として使用しないようにする方法はありません。明示的にすべての文字列参照をshortstringに変更する必要があります(または、コードを修正する必要はありません)。 –
@KenWhiteあなたの答えをありがとう。それは私の疑惑を裏付けるものです。 Delphi XE 2のString型の[ヘルプセクション](http://docwiki.embarcadero.com/RADStudio/XE2/en/String_Types)には、$ Hディレクティブをその目的のために使用できると書かれています。しかし、私はそれが時代遅れだと思う。 – Maria
コンパイル時に古いコードが破損しないようにするだけです。 Delphi 2009がデフォルトの文字列型としてUnicodeのみでリリースされ、AnsiStringをデフォルトに戻すためのスイッチがなくても、少し騒ぎがありました。これは、RTL、VCLなどの2つの異なるバージョンを持つ必要があるため、これが事実上不可能であると判断したと説明されました。 ShortStringをデフォルトにすることは、同じことを必要とするでしょう。 –