WorkToolSmith

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

太田アベル

・ 更新 ・ 2分で読めます

当サイトの記事には一部に広告リンクが含まれます。

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万件ぐらい)で試しているので確かではないのですが、少し便利になっている可能性があります。漢字の文字化けはないようです。

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

太田アベル

太田アベル

パソコンを7歳からいじり始めて40年。とにかくパソコンが好きです。気になった商品をほぼ自腹で買いまくってレビュー中!良かった点、悪かった点をズバズバ書きます。

𝕏 でフォロー プロフィールを見る

こちらもおすすめ