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


Наборы символов MAPI

Область применения: Outlook 2013 | Outlook 2016

Клиентские приложения и поставщики услуг, совместимые с MAPI, могут использовать символы ANSI (один байт) или символы Юникода (двойной байт). Наборы символов OEM не поддерживаются. Строка OEM, переданная методу или функции MAPI, приведет к сбою этого метода или функции. Клиентские приложения, работающие с именами файлов в наборе символов OEM, должны быть осторожны, чтобы преобразовать их в ANSI, прежде чем передавать их в метод или функцию MAPI.

Поддержка набора символов Юникода необязательна, как для клиентов, так и для поставщиков услуг. Все поставщики услуг должны писать свой код, чтобы они могли скомпилировать независимо от того, поддерживают ли они Юникод. Клиенты компилируются условно в зависимости от уровня поддержки, но поставщики услуг — нет. Их не нужно перекомпилировать при изменении набора символов. Ничего в коде поставщика услуг не должно быть условным.

Когда клиенты или поставщики услуг, поддерживающие Юникод, выполняют вызов метода, включающего символьные строки в качестве входных или выходных параметров, они задают флаг MAPI_UNICODE. Установка этого флага указывает на реализацию, что все входящие строки являются строками Юникода. В выходных данных установка этого флага запрашивает, чтобы все строки, передаваемые обратно из реализации, были строками Юникода, если это возможно. Реализующие методы, поддерживающие Юникод, будут соответствовать запросу; средства реализации методов, которые не предоставляют поддержку Юникода, не будут соответствовать требованиям. Строковые свойства, не имеющие формата Юникода, имеют тип PT_STRING8.

MAPI определяет константу fMapiUnicode в файле заголовка MAPIDEFS. H , представляющий набор символов по умолчанию. Если клиент или поставщик услуг поддерживает Юникод, параметр fMapiUnicode имеет значение MAPI_UNICODE. Клиенты и поставщики услуг, которые не поддерживают Юникод, устанавливают значение fMapiUnicode в ноль.

Поставщики услуг, которые не поддерживают Юникод, должны:

  • Отказаться от преобразования между наборами символов.

  • Никогда не передайте флаг MAPI_UNICODE в вызовах методов.

  • Возвращает MAPI_E_BAD_CHARWIDTH при передаче флага MAPI_UNICODE.

  • Объявите свойства строки ANSI явным образом.

Поставщики услуг также могут возвращать MAPI_E_BAD_CHARWIDTH, если они поддерживают только Юникод, а клиенты не передают флаг MAPI_UNICODE.

Текущая версия MAPI поддерживает Юникод в следующих методах:

IAddrBook::Address

IAddrBook::CreateOneOff

IAddrBook::Details

IAddrBook::ResolveName

IMAPIProp::GetLastError (только для реализации IAddrBook )

Для этих методов вызывающие могут ожидать, что все возвращаемые строки будут строками Юникода. Символьные строки, возвращаемые из реализаций MAPI любого другого метода, будут символьными строками ANSI.