Conjuntos de Caracteres MAPI

Aplica-se a: Outlook 2013 | Outlook 2016

Os aplicativos cliente e provedores de serviços compatíveis com MAPI podem usar caracteres ANSI (byte único) ou caracteres Unicode (byte duplo). Não há suporte para conjuntos de caracteres OEM. Uma cadeia de caracteres OEM passada para um método ou função MAPI fará com que esse método ou função falhe. Os aplicativos cliente que funcionam com nomes de arquivos no conjunto de caracteres OEM devem ter o cuidado de convertê-los em ANSI antes de passá-los para um método ou função MAPI.

O suporte ao conjunto de caracteres Unicode é opcional, tanto para clientes quanto para provedores de serviços. Todos os provedores de serviços devem escrever seu código para que possam compilar, independentemente de suportarem ou não Unicode. Os clientes compilam condicionalmente, dependendo do seu nível de suporte, mas os provedores de serviços não. Eles não devem ter que ser recompilados quando o conjunto de caracteres é alterado. Nada no código do provedor de serviços deve ser condicional.

Quando clientes ou provedores de serviços que dão suporte a Unicode fazem uma chamada de método que inclui cadeias de caracteres como parâmetros de entrada ou saída, eles definem o sinalizador MAPI_UNICODE. A configuração desse sinalizador indica à implementação que todas as cadeias de caracteres de entrada são cadeias de caracteres Unicode. Na saída, a configuração desse sinalizador solicita que todas as cadeias de caracteres passadas de volta da implementação sejam cadeias de caracteres Unicode, se possível. Os implementadores de método que dão suporte a Unicode atenderão à solicitação; os implementadores de método que não fornecem suporte a Unicode não cumprirão. As propriedades de cadeia de caracteres que não estão no formato Unicode são do tipo PT_STRING8.

MAPI define a constante fMapiUnicode no arquivo de cabeçalho MAPIDEFS. H para representar o conjunto de caracteres padrão. Se um cliente ou provedor de serviços der suporte a Unicode, fMapiUnicode será definido como MAPI_UNICODE. Clientes e provedores de serviços que não dão suporte a Unicode definem fMapiUnicode como zero.

Os provedores de serviços que não dão suporte a Unicode devem:

  • Recusar-se a realizar conversões entre conjuntos de caracteres.

  • Nunca passe o sinalizador MAPI_UNICODE em chamadas de método.

  • Retorne MAPI_E_BAD_CHARWIDTH quando o sinalizador MAPI_UNICODE for passado.

  • Declare propriedades de cadeia de caracteres ANSI explicitamente.

Os provedores de serviços também podem retornar MAPI_E_BAD_CHARWIDTH quando suportam apenas Unicode e os clientes não passam o sinalizador MAPI_UNICODE.

A versão atual do MAPI oferece suporte a Unicode nos seguintes métodos:

IAddrBook::Address

IAddrBook::CreateOneOff

IAddrBook::Details

IAddrBook::ResolveName

IMAPIProp::GetLastError (apenas implementação de IAddrBook )

Para esses métodos, os chamadores podem esperar que todas as cadeias de caracteres retornadas sejam cadeias de caracteres Unicode. As cadeias de caracteres retornadas de implementações MAPI de qualquer outro método serão cadeias de caracteres ANSI.