DigiPub Japan

Delphi2009への移行についての注意点

【関連サイト】
【最近のページ】
【お知らせ】

キャスト付きの代入



 たとえば、以下のように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);

 
   Page: 662
Rss News
【お勧めページ】
【過去のページ】
<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789