これを普通に
HogeHoge: Array[0..127] of Char;
と書くと、これはDelphi2007までは正しいのだが、Delphi2009からは正しくない。なぜなら、Delphi2009においてChar型とは、Unicode一文字を格納する型であり、1バイトではないからだ。
よって、上記の宣言は、
HogeHoge: Array[0..127] of AnsiChar;
と書いてやらないといけない。また同様に、DLL呼び出し字にStringのポインタ渡しのため、PChar(HogeHoge)という書き方も間違いとなる。これは
- まず、Unicodeのストリング型であるHogeHogeをAnsiStringに変換する
- それをAnsiChar型に変換し、そのポインタを取得する
function hoge(pszFileName: PChar):Boolean;
:
if (hoge(PChar(strHuga))) then ...
みたいな定義と構文だったところを
function hoge(pszFileName: PAnsiChar):Boolean;
:
if (hoge(PAnsiChar(AnsiString(strHuga)))) then ...
と、明示的にAnsiString型を意識して定義および呼び出しをしてやらなくてはならない。
【Delphiの最新記事】