Я разрабатываю программу, которая обрабатывает входящую электронную почту и смс через Windows-Mobile MAPI.Код в основном выглядит так:
ulBodyProp = PR_BODY_A;
hr = piMessage->OpenProperty(ulBodyProp, NULL, STGM_READ, 0, (LPUNKNOWN*)&piStream);
if (hr == S_OK)
{
// ... get body size in bytes ...
STATSTG statstg;
piStream->Stat(&statstg, 0);
ULONG cbBody = statstg.cbSize.LowPart;
// ... allocate memory for the buffer ...
BYTE* pszBodyInBytes = NULL;
boost::scoped_array<BYTE> szBodyInBytesPtr(pszBodyInBytes = new BYTE[cbBody+2]);
// ... read body into the pszBodyInBytes ...
}
Это работает, и у меня есть тело сообщения.Проблема в том, что это тело имеет многобайтовую кодировку, и мне нужно вернуть строку Unicode.Я думаю, я должен использовать функцию :: MultiByteToWideChar (), но как я могу догадаться, какую кодовую страницу я должен применить?Использование CP_UTF8 наивно, потому что его может просто не быть в UTF8.Использование CP_ACP работает, ну, иногда, но иногда нет.Итак, мой вопрос: как я могу получить информацию о кодовой странице сообщения.Предоставляет ли MAPI какие-либо функции для этого?Или есть способ декодировать многобайтовую строку, отличную от MultiByteToWideChar ()?
Спасибо!