プログラミングゆるめモ

プログラミングに関することをゆるくメモしてます

C++ C++Builder Windows

[C++Builder]Unicodeに対応していない昔のDLLを使用する方法

 今は、UNICODEに対応しているのは当たり前ですが
かなり昔に作成されてメンテナンスがストップしているようなDLLでは、UNICODEに対応していないことがあります。
そんなDLLを使うときに問題になるのが、ファイル名やパス名です。
 ファイル名やパス名にSHIFT-JIS では表せない文字が含まれていると、DLL側ではファイル名やパス名を正しく処理することができません。

 でも、解決策がありました。
WindowsのAPIには、ファイル名+パス名をレガシーな 8+3形式に変換するというものがあります。
8+3形式に変換すれば、UNICODEに対応していなくても正しくパス名+ファイル名の処理が可能になるという訳です。
C++Builderでは、8+3形式に変換するExtractShortPathName()という関数が用意されています。
 ですので、ExtractShortPathName() で8+3形式に変換した文字列をパス名+ファイル名として
古いDLLに渡せばOKとなります。

-C++, C++Builder, Windows