Я являюсь кодом ATL, который использует интеллектуальные указатели COM для перебора контактов MS Outlook, и на некоторых ПК я получаю ошибку COM 0x80004003 («Неверный указатель») для каждого контакта. Тот же код отлично работает на других ПК. Код выглядит следующим образом:
_ApplicationPtr ptr;
ptr.CreateInstance(CLSID_Application);
_NameSpacePtr ns = ptr->GetNamespace(_T("MAPI"));
MAPIFolderPtr folder = ns->GetDefaultFolder(olFolderContacts);
_ItemsPtr items = folder->Items;
const long count = items->GetCount();
for (long i = 1; i <= count; i++)
{
try
{
_ContactItemPtr contactitem = items->Item(i);
// The following line throws a 0x80004003 exception on some machines
ATLTRACE(_T("\tContact name: %s\n"), static_cast<LPCTSTR>(contactitem->FullName));
}
catch (const _com_error& e)
{
ATLTRACE(_T("%s\n"), e.ErrorMessage());
}
}
Интересно, могут ли это быть причиной каких-либо других приложений/надстроек? Любая помощь приветствуется.