C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

VC2008で英語 (米国) リソース文字列が取得できない

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■84900 / inTopicNo.1)  VC2008で英語 (米国) リソース文字列が取得できない
  
□投稿者/ sara (1回)-(2017/08/18(Fri) 16:48:45)

分類:[C/C++] 

[環境]
Visual Studio 2008 Professional Edition C++ MFC使用 Win32/64 Debugビルド
Windows7 Professional(64bit)

いつもお世話になっております。

VisualC++のリソースエディタで英語 (米国) リソース文字列を作成し、
下記のコードで英語文字列を取得できませんでした。(日本語文字列が返ってきます)
正しい取得方法を教えていただけませんでしょうか。
CString::LoadString()と::FindResourceEx()を使う方法を試してみましたが、
どちらもうまくいきませんでした。(日本語文字列が返ってきます)

----------------------------------------------------------------------

void CTest1Dlg::OnBnClickedButtonEnglish()
{
    if (TRUE) {
        // ::FindResourceEx()で取得
        CString str;
        if (getStringFromRes(IDS_ABOUTBOX, TRUE, str)) {
            MessageBox(str);
        }
        else {
            MessageBox(_T("error"));
        }
    }
    else {
        // CString::LoadString()で取得
        ::SetThreadLocale(0x0409);  // 英語
        CString str;
        str.LoadString(IDS_ABOUTBOX);
        MessageBox(str);
    }
}

BOOL getStringFromRes(UINT nStringID, BOOL isLangEnglish, CString& strBuffer)
{
    HINSTANCE hModule = ::AfxGetResourceHandle();
    WORD wLangId;
    if (isLangEnglish) {
        wLangId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
    }
    else {
        wLangId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
    }
    HRSRC hResource = ::FindResourceEx(hModule, RT_STRING,
        MAKEINTRESOURCE(nStringID / 16 + 1),
        wLangId);
    
    if(hResource == NULL) {
        return FALSE;
    }

    DWORD dwSize = ::SizeofResource(hModule, hResource);
    if  (dwSize < 1) {
        return FALSE;
    }

    strBuffer = _T("");
    int nLen = ::LoadString(hModule, nStringID,
        strBuffer.GetBuffer(dwSize), dwSize);
    strBuffer.ReleaseBuffer();
    if (nLen <= 0) {
        return FALSE;
    }
    
    return TRUE;
}

----------------------------------------------------------------------

引用返信 編集キー/
■84902 / inTopicNo.2)  Re[1]: VC2008で英語 (米国) リソース文字列が取得できない
□投稿者/ Azulean (852回)-(2017/08/19(Sat) 12:07:40)
同一内容で他方に返信がついているようなのでリンクしておきます。
https://social.msdn.microsoft.com/Forums/ja-JP/8585831e-fbe5-45e3-ab19-c1a9c6764c63/vc2008-?forum=vcgeneralja
引用返信 編集キー/
■84904 / inTopicNo.3)  Re[2]: VC2008で英語 (米国) リソース文字列が取得できない
□投稿者/ saki (3回)-(2017/08/19(Sat) 15:54:11)
No84902 (Azulean さん) に返信
> 同一内容で他方に返信がついているようなのでリンクしておきます。
> https://social.msdn.microsoft.com/Forums/ja-JP/8585831e-fbe5-45e3-ab19-c1a9c6764c63/vc2008-?forum=vcgeneralja

はい、急いでいたのでそちらにも投稿しました。

SetThreadUILanguage(1033);
を実行してから
CString::LoadString()を実行すると英語リソース文字列を取得できるようになりました。

ありがとうございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ