キャスト付きの代入
たとえば、以下のようにChar型で定義されている変数にByte型として値を代入しようとした場合にDelphi2009ではエラーが発生します。
function Dec(C,Num:Char): Char;
begin
if Byte(C) < Byte(Num) then
Byte(Result):=Byte(C)-byte(Num)+FHigh
else Byte(Result):=Byte(C)-byte(Num);
end;
これは、たとえば以下のように書き直す必要があります。
function Dec(C,Num:Char): Char;
begin
if Byte(C) < Byte(Num) then
Result:=Char(Byte(C)-byte(Num)+FHigh)
else Result:=Char(Byte(C)-byte(Num));
end;
sizeof
たとえば、これまでchar型は、当然のごとく1バイトでしたので、以下のようにプログラミングしてもまったく問題ありませんでしたが、
function FOO
var
chrPath: array [0..MAX_PATH-1] of char;
begin
GetTempPath(sizeof(chrPath),@chrPath);
Unicode対応によりChar型が2バイトと評価されると、上記のプログラムは暴走してしまう可能性があります。場合によってはIDE自体がハングしてしまいます。
したがって、以下のように修正する必要があります。
function FOO
var
chrPath: array [0..MAX_PATH-1] of char;
begin
GetTempPath(MAX_PATH,@chrPath);