- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DLL登録プログラムに関して)
Vista対応のDLL登録プログラムの課題と解決策
このQ&Aのポイント
- Vistaに対応するためDLLの登録プログラムを自前で作成していますが、登録がうまくいかないことがあります。regsvr32で登録した場合も同じような現象になります。問題の一つとして、レジストリに記憶されるファイルパスが日本語を含む場合文字化けしてしまうことがあります。また、ファイルパスの短い形式で記憶される問題もあります。
- 文字化けしたパスはアプリケーション側で認識できず、オブジェクトの生成に失敗してしまいます。これを回避するためには、ファイルパスを文字化けしない形式でレジストリに記憶する必要があります。
- フルパスで記憶されるDLLと短い形式で記憶されるDLLの違いは互換性の問題です。互換性を維持するためには、フルパスで記憶するように修正する必要があります。DLLを修正することで問題を解決することも可能です。修正が難しい場合は、登録プログラムの修正を検討しましょう。同様の問題に遭遇した方は共有して解決策を見つけることができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
MFCまたはATLで作成したってことでしょうか? ATLの場合は探しきれていませんが MFC-ActiveXの場合だと MFCソースのCTLREG.CPPの関数AfxOleRegisterControlClassでAfxGetModuleShortFileNameを使って短いパス名を取得して これを使ってレジストリーに保存しています ライブラリーを書き換えるか自前で登録作業をコーディングするかでしょうね ...
お礼
ご回答ありがとうございます。 確かにATLで作成しており、深くまで下っていくと GetShortFileNameという関数を使っていることがありました。 これらを書き換えると、長い名前で作成されるようになりました。 しかしながら「日本語パスの文字化け」は直りませんでした。 Webで検索すると同じ問題でつまづいている方もいたようですが、 良い回答にはいたっていませんでした(日本語パスを含まないSystem32に置くことで解決していたようです。 しかしながら私の場合はSystem32に置く実装にしたくないと思っています) 日本語が文字化けをするのも自分で書き換える必要があるのでしょうか(もしくはVC6の仕様と認識すべきですか?) 問題が解決するまで引き続きよろしくお願いします。
補足
その後調べてみた所、ATLの読み込み前に #define UNICODE を追加した所、日本語でのレジストリの登録がうまくいくようになりました。 どうやら初歩的なところでつまづいていたようです。 無事に必要要件を満たすことができました。ありがとうございました。