Поделиться через


Функция GetStringTypeExW (stringapiset.h)

Заметка

Этот API может содержать неполные или устаревшие сведения для определенных символов Юникода, особенно в дополнительном диапазоне. Для получения более точных и комплексных сведений о типе символов Юникода рекомендуется использовать эквивалентные API ICU, такие как u_charType, u_islower, u_isspaceи u_ispunct. Рекомендации по использованию API ICU в Windows см. в статье Начало работы с ICU в Windows.

Извлекает сведения о типе символов для символов в указанной исходной строке. Для каждого символа в строке функция задает один или несколько битов в соответствующем 16-разрядном элементе выходного массива. Каждый бит определяет заданный тип символа, например буквы, цифры или ни одного из них.

осторожность использование функции GetStringType Ex неправильно может нарушить безопасность приложения. Чтобы избежать переполнения буфера, приложение должно правильно задать размер выходного буфера. Дополнительные сведения о безопасности см. в статье Вопросы безопасности:пользовательского интерфейса Windows.
 
Примечание в отличие от близких родственников GetStringTypeA и GetStringTypeW, эта функция демонстрирует соответствующее поведение ANSI или Юникода с помощью коммутатора ЮНИКОД #define. Это рекомендуемая функция для извлечения типов символов.
 

Синтаксис

BOOL GetStringTypeExW(
  [in]  LCID                          Locale,
  [in]  DWORD                         dwInfoType,
  [in]  _In_NLS_string_(cchSrc)LPCWCH lpSrcStr,
  [in]  int                           cchSrc,
  [out] LPWORD                        lpCharType
);

Параметры

[in] Locale

идентификатор языкового стандарта, указывающий языковой стандарт. Это значение однозначно определяет кодовую страницу ANSI. Вы можете использовать макрос MAKELCID для создания идентификатора языкового стандарта или использования одного из следующих предопределенных значений.

Windows Vista и более поздних версий: также поддерживаются следующие пользовательские идентификаторы языкового стандарта.

[in] dwInfoType

Флаги, указывающие сведения о типе символа для получения. Возможные значения флагов см. в параметре dwInfoType GetStringTypeW. Подробные сведения о битах типа символов см. в разделе "Примечания" для GetStringTypeW.

[in] lpSrcStr

Указатель на строку, для которой извлекаются типы символов. Предполагается, что строка завершается null, если cchSrc имеет любое отрицательное значение.

[in] cchSrc

Размер в символах строки, указанной lpSrcStr. Размер относится к байтам для версии ANSI функции или расширенных символов для версии Юникода. Если размер содержит завершающий символ NULL, функция извлекает сведения о типе символа для этого символа. Если приложение задает размер любому отрицательному целочислению, исходная строка считается пустой и функция вычисляет размер автоматически с дополнительным символом для завершения null.

[out] lpCharType

Указатель на массив 16-разрядных значений. Длина этого массива должна быть достаточно большой, чтобы получить одно 16-разрядное значение для каждого символа в исходной строке. Если cchSrc не является отрицательным числом, lpCharType должен быть массивом слов с элементами cchSrc. Если cchSrc задано отрицательное число, lpCharType представляет собой массив слов с элементами lpSrcStr + 1. Когда функция возвращается, этот массив содержит одно слово, соответствующее каждому символу в исходной строке.

Возвращаемое значение

Возвращает ненулевое значение в случае успешного выполнения или 0 в противном случае. Чтобы получить расширенные сведения об ошибке, приложение может вызывать GetLastError, что может возвращать один из следующих кодов ошибок:

  • ERROR_INVALID_FLAGS. Значения, предоставленные для флагов, недопустимы.
  • ERROR_INVALID_PARAMETER. Любое из значений параметров было недопустимым.

Замечания

Общие сведения об использовании строковых функций см. в строках.

Используя кодовую страницу ANSI для предоставленного языкового стандарта, эта функция преобразует исходную строку из ANSI в Юникод. Затем он анализирует каждый символ Юникода для сведений о типе символов.

Версия ANSI этой функции преобразует исходную строку в Юникод и вызывает соответствующую функцию GetStringTypeW. Таким образом, слова в выходном буфере соответствуют не исходной строке ANSI, но его эквиваленту Юникода. Преобразование из ANSI в Юникод может привести к изменению длины строки, например пары символов ANSI, которые могут сопоставляться с одним символом Юникода. Поэтому соответствие между словами в выходном буфере и символами в исходной строке ANSI не является одно к одному во всех случаях, например многобайтовыми строками. Таким образом, версия ANSI этой функции имеет ограниченное использование для строк с несколькими символами. Вместо этого рекомендуется использовать версию функции Юникода.

Эта функция обходит ограничение, вызванное различием параметров между GetStringTypeA и GetStringTypeW. Из-за различия параметров приложение не может автоматически вызывать соответствующую версию ANSI или Юникод функции GetStringType* с помощью #define коммутатора ЮНИКОДа. С другой стороны, GetStringTypeEx, правильно ведет себя в отношении этого коммутатора. Таким образом, рекомендуется использовать функцию.

Если версия этой функции ANSI используется с идентификатором языкового стандарта юникода, функция может завершиться успешно, так как операционная система использует системную кодовую страницу. Однако символы, которые не определены в системной кодовой странице, отображаются в строке как вопросительный знак (?).

Значения lpSrcStr и lpCharType не должны совпадать. Если они одинаковы, функция завершается ошибкой с ERROR_INVALID_PARAMETER.

Параметр языкового стандарта используется только для выполнения преобразования строк в Юникод. Он не имеет ничего общего с значениями CTYPE*, предоставленными приложением. Эти значения определяются исключительно точками кода Юникода и не зависят от языкового стандарта. Например, греческие буквы указываются как C1_ALPHA для любого значения языкового стандарта.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows 2000 Server [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка stringapiset.h (include Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

GetStringTypeW

поддержки национальных языков

функции поддержки национальных языков