打破僵局,下一步是完善所有API的调用方式,使得更简单化

解决问题,在智能指针上折腾了好长时间,主要原因还是COM的功力不够呀,
这些确实是不能含糊的东西,得花时间好好充实自己。。

首先在插件connect的时候把 Outlook Application 变量放在一个全局的地方: gOutlookApp

取得联系人的关键代码:

//取得地址
LRESULT CContacts::OnBnClickedButtongetaddr(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
  //this->GetDlgItem(IDC_LISTADDR);

 CString buf = "联系人\n";

 _NameSpacePtr spNameSpace;
 gOutlookApp->GetNamespace(L"MAPI",&spNameSpace);

 AddressListsPtr spAddrLists;
 spNameSpace->get_AddressLists(&spAddrLists);

 long listsCount;
 spAddrLists->get_Count(&listsCount);
 for(int i=1;i <= listsCount;i++)
 {
  _variant_t vi(i);
  AddressListPtr spAddrList;
  spAddrLists->Item(vi,&spAddrList);

  AddressEntriesPtr spAddrEntries;  
  spAddrList->get_AddressEntries(&spAddrEntries); 
  long entryCount;
  spAddrEntries->get_Count(&entryCount);
  for(int j=1;j <= entryCount;j++)
  {
   _variant_t vj(j);
   AddressEntryPtr spEntry;
   spAddrEntries->Item(vj,&spEntry);
   BSTR sAddr;
   spEntry->get_Address(&sAddr);
   buf += sAddr;
   buf += "\n";
  }
 }
 MessageBox(buf);
 
 return 0;
}

要注意的一点是 Item函数的参数是从1开始的。

下面得继续做的就是:
1、创建联系人
2、研究 Inspector的问题
3、跟webservice联系起来
4、不停地完善 COM调用方式,使其更简单化。

另外得把注册流程走通。

原文地址:https://www.cnblogs.com/xiaotaoliang/p/164862.html