Delphi 2009 Delphi2007以前のバージョンのコードの移植

Delphi 2009 では文字列がUnicodeになったため、Delphi2007以前のコードを移植する必要があります。

  • 最低限動作させるために
    • 変数宣言の PChar -> PAnsiChar
    • 変数宣言の String -> AnsiString
    • 型キャスト PChar -> PAnsiChar
    • 型キャスト String -> AnsiString

の変換をし、コンパイルエラーを適宜修正すればよい。

  • そのほか
    • StrPLCopy MoveでStringからPcharに代入している部分→ String -> RawByteStringへ
  • バッファをString型で実装している場合

バッファをRawByteStringに変更する方法もあるが、ライブラリ内に実装されている場合変更できないこともある。その場合は、下記コード例のように、stringからpAnsiCharやpByteに積みなおして取り出す必要がある。

var  
  bytes:pByte;   
  src:string;   
  srcp:Pointer;   
begin  
  by:=Length(src) * SizeOf(src[1]);   
  srcp:=Pointer(src);   
  
  GetMem(bytes,by);   
  Move(srcp^,bytes^,by);   
end;  

変更可能なコードでバッファをString型で実装している場合 Pcharで用意したバッファからStringにSetStringしている場合に、不具合が起きる場合がある。このケースはstring型からRawByteString型に変える。

var
  buffer:String;
begin
  SetString(Buffer,pBuffer,cbTransferred);//pBuffer:PChar
end;

var
  buffer:RawByteString;
begin
  SetString(Buffer,pBuffer,cbTransferred);//pBuffer:PAnsiChar
end;

とすれば良さそうだ。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2008-09-29
Copyright © 1995–2025 iPentec all rights reserverd.