Delphi2009でDLLが読み込めない場合

Delphi2009では内部文字コードがすべてUniCode化されました。

この変化がDelphi2007以前からのDelphiコードの移植に多少の混乱を与えます。
もっとも変化が大きいのはやはりCOMやActiveXを操作する場合でしょうか。

COMやActiveXでは文字列型の意識的な変換が必要になります。

Delphi2009からの文字列型のポイント

pCharでの文字列渡しの部分は、Delphi2007までは内部はAnsi形式でした。

しかしDelphi2009ではWide形式に変わっています。

 

AnsiCharにキャストしないと動かない場合が多くなります。

たとえば

procedure HogeProc(Str: pChar);

というDllの内部関数があった場合、いままでは

HogeProc( pChar(HogeStr) );

とキャストしていましたが、Delphi2009からは

var
HogeStr: String;
HogeProc( PAnsiChar(HogeStr) );

としなければなりません。

pChar が pAnsiChar に変わっています。

DBとの文字列

また、これは未確認(私の環境でのみ成功している)情報ですが、UTF8のDBにデータを投入する際に、いままではEncodeUTF8を使っていた部分は、Delphi2009はそのまま投入しても大丈夫でした。

var  SQL: String; SQL := ‘INSERT INTO test(name) VALUES (”テスト”) ‘; DB.ExecSQL( EncodeUTF8(SQL) );

としていたものが、

var  SQL: String; SQL := ‘INSERT INTO test(name) VALUES (”テスト”) ‘; DB.ExecSQL( SQL );

でも正しく入りました。

 

これはまだ少量のデータでのみ(20万件ぐらい)で試しているので確かではないのですが、少し便利になっている可能性があります。漢字の文字化けはないようです。

業務で使う場合はもう少し確認が必要ですね。