Wab文件操作

 // 添加一个条目
//

HRESULT CWAB::AddEntry(ADDRESS_BOOK *pAddressEntry)
{
 HRESULT   hr = S_OK;
 ULONG   ulObjType = NULL;
 LPABCONT  lpABC = NULL;
 LPMAPIPROP  lpProp = NULL;
 SPropValue  Prop[13];
 FILETIME  ft;

 SBinary   pabEID;

 ASSERT(pAddressEntry != NULL);
 ASSERT(m_lpAdrBook != NULL);
 ASSERT(m_lpWABObject != NULL);
 // 得到PAB根容器
    //
 hr = m_lpAdrBook->GetPAB(&pabEID.cb,
       (LPENTRYID*)&pabEID.lpb);
 if (FAILED(hr))
  goto Exit;
 
 //  打开所有在PAB根容器的WAB,并使用MAPI_MODIFY标志
 //
 hr = m_lpAdrBook->OpenEntry(pabEID.cb,
  (ENTRYID*)pabEID.lpb,
  NULL,
  MAPI_MODIFY,
  &ulObjType,
  (LPUNKNOWN FAR *)&lpABC );
 if (FAILED(hr))
  goto Cleanup0;
 
 // 先清零,保存数据到结构
 //
 ZeroMemory(Prop, sizeof(SPropValue)*13);

 Prop[0].ulPropTag = PR_DISPLAY_NAME;       // 联系人
 Prop[1].ulPropTag = PR_NICKNAME;        // 昵称
 Prop[2].ulPropTag = PR_GENDER;         // 性别
 Prop[3].ulPropTag = PR_BIRTHDAY;        // 生日
 Prop[4].ulPropTag = PR_HOME_ADDRESS_COUNTRY;     // 国家/地区
 Prop[5].ulPropTag = PR_COMPANY_NAME;       // 单位
 Prop[6].ulPropTag = PR_DEPARTMENT_NAME;       // 部门
 Prop[7].ulPropTag = PR_DISPLAY_NAME_PREFIX;      // 职称
 Prop[8].ulPropTag = PR_MOBILE_TELEPHONE_NUMBER;     // 移动电话号码
 Prop[9].ulPropTag = PR_OFFICE_TELEPHONE_NUMBER;     // 业务电话号码
 Prop[10].ulPropTag = PR_PRIMARY_FAX_NUMBER;      // 业务传真号码
 Prop[11].ulPropTag = PR_HOME_TELEPHONE_NUMBER;     // 住宅电话号码
 Prop[12].ulPropTag = PR_HOME_FAX_NUMBER;      // 住宅传真号码

 // 转换生日字段
 //
 SystemTimeToFileTime(&pAddressEntry->m_stBirthday, &ft);

 Prop[0].Value.lpszA = pAddressEntry->m_strDispName.GetBuffer(0);    // 联系人
 Prop[1].Value.lpszA = pAddressEntry->m_strNickName.GetBuffer(0);    // 昵称
 Prop[2].Value.i = pAddressEntry->m_iGender;          // 性别
 Prop[3].Value.ft = ft;               // 生日
 Prop[4].Value.lpszA = pAddressEntry->m_strRegion.GetBuffer(0);     // 国家/地区
 Prop[5].Value.lpszA = pAddressEntry->m_strOrganization.GetBuffer(0);   // 单位
 Prop[6].Value.lpszA = pAddressEntry->m_strDepartment.GetBuffer(0);    // 部门
 Prop[7].Value.lpszA = pAddressEntry->m_strPosition.GetBuffer(0);    // 职位
 Prop[8].Value.lpszA = pAddressEntry->m_strMobilePhoneNumber.GetBuffer(0);  // 移动电话号码
 Prop[9].Value.lpszA = pAddressEntry->m_strOfficePhoneNumber.GetBuffer(0);  // 业务电话号码
 Prop[10].Value.lpszA = pAddressEntry->m_strOfficeFaxNumber.GetBuffer(0);  // 业务传真号码
 Prop[11].Value.lpszA = pAddressEntry->m_strHomePhoneNumber.GetBuffer(0);  // 住宅电话号码
 Prop[12].Value.lpszA = pAddressEntry->m_strHomeFaxNumber.GetBuffer(0);   // 住宅传真号码
 
 pAddressEntry->m_strDispName.ReleaseBuffer();    // 联系人
 pAddressEntry->m_strNickName.ReleaseBuffer();    // 昵称
 pAddressEntry->m_strRegion.ReleaseBuffer();     // 国家/地区
 pAddressEntry->m_strOrganization.ReleaseBuffer();   // 单位
 pAddressEntry->m_strDepartment.ReleaseBuffer();    // 部门
 pAddressEntry->m_strPosition.ReleaseBuffer();    // 职位
 pAddressEntry->m_strMobilePhoneNumber.ReleaseBuffer();  // 移动电话号码
 pAddressEntry->m_strOfficePhoneNumber.ReleaseBuffer();  // 业务电话号码
 pAddressEntry->m_strOfficeFaxNumber.ReleaseBuffer();  // 业务传真号码
 pAddressEntry->m_strHomePhoneNumber.ReleaseBuffer();  // 住宅电话号码
 pAddressEntry->m_strHomeFaxNumber.ReleaseBuffer();   // 住宅传真号码
 
 // 创建一个条联系人
 //
 hr = lpABC->CreateEntry(0,
      NULL,
      0,
      &lpProp);
 if (FAILED(hr))
  goto Cleanup0;
 // 设置联系人资料为 13 个属性, 并把属性结构传入参数
 //
 hr  = lpProp->SetProps(13, Prop, NULL);
 if (FAILED(hr))
  goto Cleanup1;

 // 同上,如果不保存,那么所有修改失效, 使用这个函数,
 // 必须打开容器时要用MAPI_MODIFY标志,否则会产生访
 // 问内存违例
 //
 hr = lpProp->SaveChanges(0);
 if (FAILED(hr))
  goto Cleanup1;

Cleanup1:
 lpProp->Release();

Cleanup0:
 lpABC->Release();

Exit:
 return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值