打破僵局,下一步是完善所有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调用方式,使其更简单化。
另外得把注册流程走通。