CString ресурсы отображаются как ANSI - PullRequest
0 голосов
/ 01 марта 2019

Проблема

У меня есть несколько файлов ресурсов, которые я перевел на пару языков, и я заметил, что некоторые символы отображаются неправильно в моем пользовательском интерфейсе.

Например: 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

1 Ответ

0 голосов
/ 05 марта 2019

Обязательно сохраните файл ресурсов в формате utf-16, а не в формате ANSI.И вы можете сослаться на этот ответ , чтобы узнать о различиях в формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...