Outlook 365, ошибка 8000FFFF (неожиданно) при получении сеанса MAPI - PullRequest
1 голос
/ 20 марта 2020

Я уже несколько лет поддерживаю устаревший проект C ++, используя VS2012, он состоит из надстройки для Outlook и внепроцессного COM-сервера. Серверу требуется сеанс MAPI, а сеанс Outlook (pMarshalledMAPISession) и приложение Outlook (pMarshalledOutlookApplication) маршалируются к нему.

Этот бит кода используется для получения объекта сеанса MAPI, который он может использовать :

pMarshalledMAPISession->QueryInterface( IID_IMAPISession, (LPVOID*) &pMAPISession );

Здесь нет ничего особенного, и он работал с Outlook, 2007, 2010, 2013, 2016. Что происходит с Outlook 365, так это то, что вызов QueryInterface() возвращает 8000FFFF ( непредвиденная ошибка). MAPIInitialize() был вызван. Я пытался получить сеанс из приложения Outlook, как это:

Outlook::_ApplicationPtr outlookApplication = nullptr;
Outlook::_NameSpacePtr outlookMAPISession = nullptr;
IUnknownPtr lpUnkMAPISession = nullptr;
LPUNKNOWN lpMAPISessionDisp = nullptr;

outlookApplication = pMarshalledOutlookApplication;
outlookApplication->get_Session(&outlookMAPISession);
hr = outlookMAPISession->get_MAPIOBJECT(&lpUnkMAPISession);
hr = lpUnkMAPISession->QueryInterface(IID_IMAPISession, (void**)&lpMAPISessionDisp);

Опять же, этот код работает с предыдущими версиями Outlook, но последний вызов QueryInterface () завершается ошибкой 8000FFFF в Outlook 365 Я также пытался использовать текущий активный объект Outlook.Application, но с той же ошибкой.

Есть ли добрый святой, который мог бы сказать мне, как получить сеанс MAPI, который можно использовать на сервере OOP из приложения Outlook? Прошу прощения за лоскутные, неоднородные сэмплы, код посреди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...