Наборы символов 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 поддерживает Юникод в следующих методах:
IMAPIProp::GetLastError (только для реализации IAddrBook )
Для этих методов вызывающие могут ожидать, что все возвращаемые строки будут строками Юникода. Символьные строки, возвращаемые из реализаций MAPI любого другого метода, будут символьными строками ANSI.