Всем привет.
У меня такая задача. в MS Outlook 2003 при выборе мыла пользователем нужно просматривать кастомные свойства мыла, если оно (свойство) там обнаружиться то добавить в body этого мыла немного текста.
Теперь что я пишу:
Подключился к событию SelectionChanged у объекта Explorer'a
Соотв-но обработчик:
void __stdcall CAddin::OnSelChanged()
{
_ExplorerPtr spExpl;
MAPIFolderPtr spFld;
OlItemType itemType;
SelectionPtr slc;
long count;
_MailItemPtr mail;
BSTR senderEmail;
m_spApp->ActiveExplorer(&spExpl);
spExpl->get_CurrentFolder(&spFld);
spFld->get_DefaultItemType(&itemType);
if (itemType != olMailItem)
return;
spExpl->get_Selection(&slc);
slc->get_Count(&count);
for (long i=1; i<=count; i++) {
slc->Item(_variant_t(i), (IDispatch**)&mail);
mail->get_SenderEmailAddress(&senderEmail);
..........
}
}
на строчке mail->get_SenderEmailAddress(&senderEmail); происходит исключение.
здесь нет кода для его отлова поэтому Outlook после такого кода просто дальше работает.
соотв-но нужные мне действия
...................
не происходят.
на самом деле я так понимаю объект mail некорректно взялся. В принципе любой его метод приводит ошибке.
Подскажите плз кто знает в чем ошибка.
Кстати это не может быть связано как-то с секьюрностью? Имею ввиду когда Outlook спрашивает разрешаем или нет на X минут доступ для запросившего приложения? Кстати этот код почемуто не вызвал такого сообщения
Заранее спасибо.
22.12.04 20:44: Перенесено модератором из 'Работа — поиск и предложение' — Flamer
Здравствуйте, amigo421, Вы писали:
A> _MailItemPtr mail;
A>...
A> slc->Item(_variant_t(i), (IDispatch**)&mail);
A> mail->get_SenderEmailAddress(&senderEmail);
Вот этот кастинг и является источником ошибки. Все ж таки _MailItem — это не IDispatch! Правда же?!
Здравствуйте, Vi2, Вы писали:
Спасибо понятно, но не полностью. Коллекция Item'ов в Selection'е состоит из MailItem'ов.
Так как же правльно привести типы? Можно примерчик?
Заранее спасибо.
Vi2>Здравствуйте, amigo421, Вы писали:
Vi2>A>> _MailItemPtr mail;
A>>...
A>> slc->Item(_variant_t(i), (IDispatch**)&mail);
A>> mail->get_SenderEmailAddress(&senderEmail);
Vi2>
Vi2>Вот этот кастинг и является источником ошибки. Все ж таки _MailItem — это не IDispatch! Правда же?!
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, amigo421, Вы писали:
Vi2>A>> _MailItemPtr mail;
A>>...
A>> slc->Item(_variant_t(i), (IDispatch**)&mail);
A>> mail->get_SenderEmailAddress(&senderEmail);
Vi2>
Vi2>Вот этот кастинг и является источником ошибки. Все ж таки _MailItem — это не IDispatch! Правда же?!
Похоже я был прав насчет секьюрити:
Все поля MailItem которые не требуют доступа к почтовой БД показываются нормально а остальные вызывают exception. Проверил с OutlookSpy.
Только вот непонятно почему у того же OutlookSpy доступ к этим полям вызывает диалог аутлука с вопросом на сколько минут даем доступ, а у меня никаких диалого только exception вываливается?
Как бы добраться до HTMLBody Sender'a? Может кто даст пример?