HMODULE m_LangDll;
wchar_t* GetString(const int StringID)
{
wchar_t* nn = {0};
if (m_LangDll)
{
wchar_t temp[2048];
if(::LoadString(m_LangDll, StringID, temp, 2048))
{
MessageBox(0, L"string found", 0, 0);
nn = temp;
return nn;
}
}
//assert(s.length() && _T("String not found!"));
return 0;
}
このコードは完全に正常に動作します。問題なく欲しい文字列を返します。
MessageBox(0, L"String Not Found", 0, 0) を削除しても削除されません。ランダムな文字を返します。私は明らかに何か間違ったことをしています。MessageBox(0,0,0,0) への一見無関係な呼び出しがどのように影響するかを理解していません。
MessageBox 呼び出しを他のコードに置き換えてみました。より多くの wchar_t* を割り当てるようですが、MessageBox の呼び出しと関係があるようです。
私は GetString を次のように呼び出しています...
MessageBox(0, GetString(101),L"HHHHH", 0);
そして、私がそれを次のように呼び出すと、別のジブリッシュが発生します...
wchar_t* tempString = GetString(101);
MessageBox(0, tempString, 0, 0);
しかし、GetString で MessageBox() をコメントアウトしない限り、これらの方法はどちらも機能します。
[編集]
お返事ありがとうございます。どれも本当に役に立ちました。
私のコードは今
wchar_t* GetString(const int StringID)
{
wchar_t* nn = new wchar_t[2048];
if (m_LangDll)
{
if(::LoadString(m_LangDll, StringID, nn, 2048))
{
return nn;
}
}
delete [] nn;
//assert(s.length() && _T("String not found!"));
return 0;
}
特にneagoegabに感謝します。
もう1つ質問です。MessageBox() がコードを機能させたのはなぜでしょうか?