none
IE7のwininet.dllに対するFormatMessageで日本語が取得できない RRS feed

  • 質問

  • 以下の環境でFTPクライアントソフトを開発しています。

     OS:WindowsXP SP2

     IE:version 7.0.5730.13

     開発環境:VC++6.0

    CFtpConnectionクラスを使用して、ファイル転送処理を行う中で、例外発生時にCInternetException::GetErrorMessageを

    呼び出していますが、ここで英語の文字列しか取得できません。

    ※GetErrorMessageの中を見ると、wininet.dllに対してFormatMessage しているようです。

    昔は、日本語が取れていたような気がしたので試しにIE7をアンインストールしてみると、日本語が取得できました。

    ちなみにVISTA+IE7で動かしてみると日本語が取得できました。

     

    すなわち、XP+IE7の環境だと日本語が取得できないみたいなのですがXPのIE7のwininet.dllには日本語が含まれていないのでしょうか(wininet.dllのプロパティを見ると、「英語」となっていることは認識しているのですが、IE6で取れていたのに、IE7にしてとれなくなるのに合点がいきません)?

    もしくは何らかの手段で日本語を表示できるのでしょうか?

    長文で申し訳ありませんが、何かご存知の方がいらっしゃいましたらご教授いただきたいと思います。

     

    以下、参考までに実装の一部です。

       //インターネットセッション初期化
       pIntSession = new CInternetSession("hello");
       try {
          //FTP接続
          pFtpCon = pIntSession->GetFtpConnection(szServer, szUserName, szPassWord);
             ・
             ・
       } catch (CInternetException *ex) {
          // 例外処理
          ex->GetErrorMessage(szError, 512);   ←ここで英語しか帰ってこない
          strWork.Format("例外が発生しました。\nエラー: %d\n%s", ex->m_dwError, szError);
                AfxMessageBox(strWork, MB_OK | MB_ICONEXCLAMATION);
         }

    2008年9月26日 1:21

回答

  • 各言語に対応した message は、wininet.dll.mui の中に存在しているようです。

    # 試しにリソースエディタで c:\windows\system32\ja-JP\wininet.dll.mui を開いてみると、日本語のメッセージが集められているのが分かります。

     

    wininet.dll がどの wininet.dll.mui を参照するかは、Visual Studio で wininet.dll を開いた時に "MUI" というエントリがあると思いますので、その中を開いてみて下さい。

    例えば、そこに en-US と書かれていると、c:\windows\system32\en-US\wininet.dll.mui を探しに行ってしまうので、日本語のメッセージは取得できないでしょう。

    # 「 ja-JP に書き換えれば正しく動作するのか?」は保証の限りではないと思います…。

    2008年9月30日 6:29
  • 解決策ではありませんが、参考情報としてリンクしておきます。

     

    Multilingual User Interface

    http://msdn.microsoft.com/en-us/library/ms776201(VS.85).aspx

    2008年9月30日 14:58
    モデレータ

すべての返信

  • 各言語に対応した message は、wininet.dll.mui の中に存在しているようです。

    # 試しにリソースエディタで c:\windows\system32\ja-JP\wininet.dll.mui を開いてみると、日本語のメッセージが集められているのが分かります。

     

    wininet.dll がどの wininet.dll.mui を参照するかは、Visual Studio で wininet.dll を開いた時に "MUI" というエントリがあると思いますので、その中を開いてみて下さい。

    例えば、そこに en-US と書かれていると、c:\windows\system32\en-US\wininet.dll.mui を探しに行ってしまうので、日本語のメッセージは取得できないでしょう。

    # 「 ja-JP に書き換えれば正しく動作するのか?」は保証の限りではないと思います…。

    2008年9月30日 6:29
  • 解決策ではありませんが、参考情報としてリンクしておきます。

     

    Multilingual User Interface

    http://msdn.microsoft.com/en-us/library/ms776201(VS.85).aspx

    2008年9月30日 14:58
    モデレータ
  • さんせいさん、こんにちは!
    こちらの件、その後いかがでしょうか?

    Takashi SAKAMOTOさん、Azuleanさんご回答ありがとうございます。

     

    こちらの回答および情報が参考になったのではないかと思いましたので
    私のほうで回答済みチェックをつけさせていただきました。
    もし、さんせいさんが有効な情報ではないと思われた場合には、チェックを解除していただくこともできます。

    これからも MSDN Forum をよろしくお願いします!
    それでは

     

    2008年10月14日 9:14