WinAPI и поддержка UTF-8

Вы также можете использовать auto для определения указателя на функцию:

const auto T_CallbackName = Foo :: CallbackName

или ссылку на функцию

[ 113] авто & амп; T_CallbackName = Foo :: CallbackName

заметит, что это все равно будет работать, даже если вы измените количество параметров обратного вызова

7
задан 2 February 2009 в 20:36
поделиться

3 ответа

Быстрый ответ: Нет.

Более длинный ответ: это будет работать, если строка только будет содержать регулярные символы ANSI, например, американский английский язык, так как эти коды символов являются тем же в UTF-8 и ANSI.

Если символы не-ANSI будут включены, или какие-либо двухбайтовые закодированные символы, то необходимо будет преобразовать к использованию Unicode-16 MultiByteToWideChar с CP_UTF8. Ваша программа должна будет также быть скомпилирована с UNICODE, определенным, или можно использовать вызовы API 'W' - например, MessageBoxW.

(Обратите внимание, что функции, берущие текстовый аргумент, такие как MessageBox, CreateWindow отображаются или на или на версии 'W' в зависимости от того, определяется ли UNICODE).

Это может также быть полезным;

http://www.joelonsoftware.com/articles/Unicode.html

8
ответ дан 6 December 2019 в 12:55
поделиться

Я использую макросы преобразования строк ATL/MFC. Например, если Вам назвали строку ASCII myUTF8Str содержа символы UTF8:

::MessageBox(hWnd, CA2T(myUTF8Str, CP_UTF8), _T("Caption"), MB_OK);

Кроме того, можно создать экземпляр строки, например:

CA2T myConvertedString(myUTF8Str, CP_UTF8);
...
TRACE(_T("Converted: %s\n"), myUTF8Str.m_psz);

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

Можно также закодировать использование CT2A, например:

CT2A myEncodedString("Some UTF8", CP_UTF8);

Если Вы не используете ТЕКСТОВЫЕ макросы, то используйте CA2W, CW2A, и т.д.

4
ответ дан 6 December 2019 в 12:55
поделиться

Нет, используйте MultiByteToWideChar с CP_UTF8. См. http://www.siao2.com/2006/10/11/816996.aspx для того, почему A не может сделать этого; W (UCS-2) единственная альтернатива.

4
ответ дан 6 December 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: