outlook express 导入导出问题 如何读取outlook express分组以及分组关联的联系人,以及如何设置分组、新增分组的联系人?网上是说分组信息是在IDistList里面,关键是如何通过分组找到分组对应的联系人?最好有源码说明下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void Export(){ HRESULT hr = S_OK; LPADRBOOK lpAddrbk = NULL; ULONG ulObjType = NULL; LPSPropValue lpProp; LPABCONT lpABC = NULL; LPMAPIPROP lpNewPABEntry = NULL; LPSPropProblemArray lpPropProblems = NULL; HRESULT hRes; LPWABOBJECT lpWABObject; LPWAB_PARAM lpWABParam = NULL; DWORD Reserved2 = NULL; HINSTANCE hinstLib; hinstLib = LoadLibrary("c:\\Program Files\\Common Files\\System\\wab32.dll"); LPWABOPEN procWABOpen; ULONG ulcValues = 0; LPSPropValue lpPropArray = NULL; int i; if (hinstLib != NULL) { // 获取"Wab32.dll"内部涵数WABOpen的进程地址 procWABOpen = (LPWABOPEN) GetProcAddress(hinstLib, "WABOpen"); if (procWABOpen != NULL) { hRes = (procWABOpen)(&lpAddrbk,&lpWABObject,NULL,Reserved2); if (hRes != S_OK) exit(1); } } // 得到PAB根容器 // SBinary pabEID; hr = lpAddrbk -> GetPAB(&pabEID.cb, (LPENTRYID *)&pabEID.lpb); if (FAILED(hr)) goto Cleanup; hr = lpAddrbk->OpenEntry(pabEID.cb, // 打开记录的大小 (ENTRYID*)pabEID.lpb, // 记录的ID NULL, // 接口NULL MAPI_MODIFY, // 标志 &ulObjType, (LPUNKNOWN FAR *)&lpABC); if (FAILED(hr)) goto Cleanup; hr = lpABC->GetProps(NULL, 0, &ulcValues, &lpPropArray ); if (FAILED(hr)) goto Cleanup; for (i=0; i<ulcValues;i++) { if (lpPropArray[i].ulPropTag == PR_DEF_CREATE_DL) { lpProp = new SPropValue; lpProp->dwAlignPad = lpPropArray[i].dwAlignPad; lpProp->ulPropTag = lpPropArray[i].ulPropTag; lpProp->Value = lpPropArray[i].Value; break; } } //创建一个分组 hr = lpABC->CreateEntry(lpProp->Value.bin.cb, (ENTRYID*)lpProp->Value.bin.lpb, CREATE_CHECK_DUP_LOOSE, &lpNewPABEntry); if (FAILED(hr)) goto Cleanup; SPropValue pPropsMesg[1]; ZeroMemory( pPropsMesg, sizeof(SPropValue)); pPropsMesg[0].dwAlignPad = 0; pPropsMesg[0].ulPropTag = PR_DISPLAY_NAME; pPropsMesg[0].Value.LPSZ = "abcd"; //设置分组属性为1个,并把属性结构传入参数 hr = lpNewPABEntry->SetProps(1, pPropsMesg, &lpPropProblems); if (FAILED(hr)) goto Cleanup; // 如果你不调用SaveChanges方法,所做的修改不会被保存 // 正如你如果打开不用MAPI_MODIFY标志,那么会产生访问 // 违例错误 // hr = lpNewPABEntry->SaveChanges(NULL); if (FAILED(hr)) goto Cleanup;Cleanup: if (lpNewPABEntry) lpNewPABEntry->Release(); if (lpABC) lpABC->Release(); if (lpAddrbk) lpAddrbk->Release();} 这个东东太偏门了一个分组会有多个联系人,所有联系人的ENTRYID都保存在这个分组的PR_CHILD_ENTRYID属性中,在这个属性里面添加联系人的ENTRYID,记得它是以MultiValuesBinary方式保存的。做到这点所需的代码还不少,慢慢啃吧 楼上的,你这个PR_CHILD_ENTRYID属性哪来的,WABTAGS.H里面根本没有这个属性. SORRY,一不小心看错了,PR_CHILD_ENTRYID是我自定义的一个属性,上面当我没说。时间太久远,代码也很复杂,依稀记得OE好像没有分组特性,懒得再去看代码了。 VC中如何实现根据数据库中的图片、音频等远程存放位置信息读取图片和音频? 真是怪了,一步步调试运行正确,Ctrl+F5运行就出错 求助:关于matlab图像处理的矢量化? 谁有 Overlapped I/O 完成例程 的封装模型? 关于在MsFlexDbGrid控件中换行和自动调整列宽度的问题,在线等~~~ 如何实现一个具有画布功能的控件? 哪有正版的VC++下载?教育网上的。 新手求助:关于树节点控制响应 寻DIALOG上画图的例子 两个非模态对话框窗口控件焦点切换 COMBOBOX比如我设置了10个选项怎么动态的显示我传进来的参数 MFC中如何初始化EDIT的值
{
HRESULT hr = S_OK;
LPADRBOOK lpAddrbk = NULL;
ULONG ulObjType = NULL;
LPSPropValue lpProp;
LPABCONT lpABC = NULL;
LPMAPIPROP lpNewPABEntry = NULL; LPSPropProblemArray lpPropProblems = NULL; HRESULT hRes;
LPWABOBJECT lpWABObject;
LPWAB_PARAM lpWABParam = NULL;
DWORD Reserved2 = NULL;
HINSTANCE hinstLib;
hinstLib = LoadLibrary("c:\\Program Files\\Common Files\\System\\wab32.dll");
LPWABOPEN procWABOpen;
ULONG ulcValues = 0;
LPSPropValue lpPropArray = NULL;
int i;
if (hinstLib != NULL)
{
// 获取"Wab32.dll"内部涵数WABOpen的进程地址
procWABOpen = (LPWABOPEN) GetProcAddress(hinstLib, "WABOpen");
if (procWABOpen != NULL)
{
hRes = (procWABOpen)(&lpAddrbk,&lpWABObject,NULL,Reserved2);
if (hRes != S_OK) exit(1);
}
} // 得到PAB根容器
//
SBinary pabEID;
hr = lpAddrbk -> GetPAB(&pabEID.cb, (LPENTRYID *)&pabEID.lpb);
if (FAILED(hr)) goto Cleanup; hr = lpAddrbk->OpenEntry(pabEID.cb, // 打开记录的大小
(ENTRYID*)pabEID.lpb, // 记录的ID
NULL, // 接口NULL
MAPI_MODIFY, // 标志
&ulObjType,
(LPUNKNOWN FAR *)&lpABC);
if (FAILED(hr)) goto Cleanup; hr = lpABC->GetProps(NULL, 0, &ulcValues, &lpPropArray );
if (FAILED(hr)) goto Cleanup;
for (i=0; i<ulcValues;i++)
{
if (lpPropArray[i].ulPropTag == PR_DEF_CREATE_DL)
{
lpProp = new SPropValue;
lpProp->dwAlignPad = lpPropArray[i].dwAlignPad;
lpProp->ulPropTag = lpPropArray[i].ulPropTag;
lpProp->Value = lpPropArray[i].Value;
break;
}
}
//创建一个分组
hr = lpABC->CreateEntry(lpProp->Value.bin.cb,
(ENTRYID*)lpProp->Value.bin.lpb,
CREATE_CHECK_DUP_LOOSE,
&lpNewPABEntry);
if (FAILED(hr)) goto Cleanup; SPropValue pPropsMesg[1];
ZeroMemory( pPropsMesg, sizeof(SPropValue)); pPropsMesg[0].dwAlignPad = 0;
pPropsMesg[0].ulPropTag = PR_DISPLAY_NAME;
pPropsMesg[0].Value.LPSZ = "abcd"; //设置分组属性为1个,并把属性结构传入参数
hr = lpNewPABEntry->SetProps(1, pPropsMesg, &lpPropProblems);
if (FAILED(hr)) goto Cleanup; // 如果你不调用SaveChanges方法,所做的修改不会被保存
// 正如你如果打开不用MAPI_MODIFY标志,那么会产生访问
// 违例错误
//
hr = lpNewPABEntry->SaveChanges(NULL);
if (FAILED(hr)) goto Cleanup;Cleanup:
if (lpNewPABEntry) lpNewPABEntry->Release();
if (lpABC) lpABC->Release(); if (lpAddrbk) lpAddrbk->Release();
}