Проблема
У меня есть несколько файлов ресурсов, которые я перевел на пару языков, и я заметил, что некоторые символы отображаются неправильно в моем пользовательском интерфейсе.
Например: Versión:
отображается как Versión:
.Я гарантировал, что у меня есть директивы UNICODE
и _UNICODE
, которые, исходя из всего, что я прочитал, должны работать как положено.Что может быть причиной этого?
Код
Код, который вызывается (и я действительно проверял, что он достигает этого метода):
static HINSTANCE _languageDll = NULL; //Setup in another function call
CString GetLangString(int resourceId)
{
CString langString;
langString.LoadString(_languageDll, resourceId);
return langString;
}
Осматривая langString
Я вижу, что он загружается Versión:
Чтобы проверить, не возникла ли проблема с дисплеем, я попробовал что-то похожее на следующее, и оно отображалось правильно:
return CString("Versión:");
ПросматриваяКод, который я заметил, есть определение LoadString
в WinUser.h , которое переключается между LoadStringW
и LoadStringA
в соответствии с директивой UNICODE
.После некоторого Google-фу я безуспешно попробовал следующее:
CString GetLangString(int resourceId)
{
WCHAR buffer[256];
LoadString(_languageDll, resourceId, buffer, sizeof(buffer)/sizeof(WCHAR));
return CString(buffer);
}
Я не дал ему вернуться, глядя на отладчик, я увидел, что он снова загружен Versión:
.
Я в полной растерянности относительно того, почему это происходит.Может ли это быть что-то с файлами ресурсов?Я просто погружаюсь в C ++, чтобы мои навыки могли быть лучше (AKA, я нуб), поэтому любая помощь по этому вопросу была бы очень признательна.
Примечание: я беру на себя проект, созданный кем-то другимпоэтому причины, по которым используются определенные функции, мне неизвестны.
Редактировать 1
Строка в исходном файле RC выглядит следующим образом:
STRINGTABLE
BEGIN
IDS_STRING703 "Version: %d.%d.%d.%d"
END
А в переведенном RC-файле:
STRINGTABLE
BEGIN
IDS_STRING703 "Versión: %d.%d.%d.%d"
END