110,536
社区成员
发帖
与我相关
我的任务
分享
[DllImport("your.dll")]
// 读取Outlook Express通讯薄内容(文件夹、名字、EMAIL)
void CGetEmailDlg::OnOK()
{
HRESULT hRes;
LPADRBOOK lpAdrBook;
LPWABOBJECT lpWABObject;
DWORD Reserved2 = NULL;
HINSTANCE hinstLib;
hinstLib = LoadLibrary("C:\\Program Files\\Common Files\\System\\wab32");
fWABOpen procWABOpen;
WAB_PARAM wp = {0};
wp.cbSize = sizeof(WAB_PARAM);
// Only want to deal with "Main Identity's Contacts"
wp.ulFlags = WAB_ENABLE_PROFILES; //设置这个值的话,表示只取当前的标识wab.去除share folder
if (hinstLib != NULL)
{
// 获取"Wab32.dll"内部涵数WABOpen的进程地址
procWABOpen = (fWABOpen) GetProcAddress(hinstLib, "WABOpen");
if (procWABOpen != NULL)
{
hRes = (procWABOpen)(&lpAdrBook,&lpWABObject,&wp,Reserved2);
_ASSERTE(hRes == S_OK);
if (hRes != S_OK) exit(1);
ULONG lpcbEntryID;
ENTRYID *lpEntryID;
hRes = lpAdrBook->GetPAB(
&lpcbEntryID,
&lpEntryID
);
_ASSERTE(hRes == S_OK);
if (hRes != S_OK) exit(2);
ULONG ulFlags = MAPI_BEST_ACCESS;
ULONG ulObjType = NULL;
LPUNKNOWN lpUnk = NULL;
hRes = lpAdrBook->OpenEntry(
lpcbEntryID,
0, //将这个值设为0的话,取得的将是wab中的所有目录。如果是设为&lpEntryID,则取得的是所有的联系人记录项
NULL,
ulFlags,
&ulObjType,
&lpUnk
);
ulFlags = WAB_LOCAL_CONTAINERS; //这里ulFlags如果设为WAB_PROFILE_CONTENTS,则表示在container里获取所有的记录。造成每个folder里读取出来的记录都是全部记录
// ulFlags = WAB_PROFILE_CONTENTS;
if (ulObjType == MAPI_ABCONT)
{
IABContainer *lpContainer = static_cast <IABContainer *>(lpUnk);
LPMAPITABLE lpTable = NULL;
hRes = lpContainer->GetHierarchyTable(CONVENIENT_DEPTH,&lpTable);//从container中取得table,这里的table保存了文件夹信息
// hRes = lpContainer->GetContentsTable(ulFlags,&lpTable);
_ASSERT(lpTable);
ULONG ulRows;
hRes = lpTable->GetRowCount(0,&ulRows);//第1个参数为保留参数。固定为0
_ASSERTE(hRes == S_OK);
SRowSet *lpRows;
hRes = lpTable->QueryRows(
ulRows, // 获取所有行
0,
&lpRows
);
m_ListEmail.ResetContent();
SRow *lpRow = NULL;
SPropValue *lpProp = NULL;
BOOL bNotFolder = FALSE;
IABContainer *lpContainer2 = NULL;
LPENTRYID lpEID;
ULONG cbEID;
for(ULONG i=0;i<lpRows->cRows;i++)
{
bNotFolder = FALSE;
lpRow = &lpRows->aRow[i];
CString strTemp=_T("");
CString strM = _T("");
CString strFolderName = _T("");
for(ULONG j=0;j<lpRow->cValues;j++)
{
lpProp = &lpRow->lpProps[j];
if (lpProp->ulPropTag == PR_DISPLAY_NAME_A)
strFolderName = strFolderName +"目录: " + (char *)lpProp->Value.lpszA;
if (lpProp->ulPropTag == PR_ENTRYID)
{
lpEID = (LPENTRYID)lpProp->Value.bin.lpb;
cbEID = lpProp->Value.bin.cb;
}
if (lpProp->ulPropTag == PR_DEPTH)
{
if(lpProp->Value.l ==0)
{
bNotFolder = TRUE;
break;
}
}
}
if(bNotFolder)
continue;
hRes = lpContainer->OpenEntry(
cbEID,
lpEID,
NULL,
ulFlags,
&ulObjType,
(LPUNKNOWN *)&lpContainer2
);
LPMAPITABLE lpTable2 = NULL;
hRes = lpContainer2->GetContentsTable(ulFlags,&lpTable2);
ULONG ulRows2;
hRes = lpTable2->GetRowCount(0,&ulRows2);
SRowSet *lpRows2;
hRes = lpTable2->QueryRows(
ulRows2, // 获取所有行
0,
&lpRows2
);
for(ULONG i=0;i<lpRows2->cRows;i++)
{
SRow *lpRow2 = &lpRows2->aRow[i];
CString strEmail=_T("");
CString strName=_T("");
for(ULONG j=0;j<lpRow2->cValues;j++)
{
SPropValue *lpProp2 = &lpRow2->lpProps[j];
if (lpProp2->ulPropTag == PR_EMAIL_ADDRESS_A)
strEmail = strEmail +" Email: " + (char *)lpProp2->Value.lpszA;
if (lpProp2->ulPropTag == PR_DISPLAY_NAME_A)
strName = strName +" Name: " + (char *)lpProp2->Value.lpszA;
}
strTemp = strFolderName + strName + strEmail;
m_ListEmail.AddString(strTemp);
lpWABObject->FreeBuffer(lpRow2);
}
lpWABObject->FreeBuffer(lpRows2);
lpWABObject->FreeBuffer(lpRow);
}
lpWABObject->FreeBuffer(lpRows);
}
}
FreeLibrary(hinstLib);
}
}
[DllImport("idcarddll.dll", EntryPoint = "RecogNewIdcardALL ",
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]//加载dll
public static extern int RecogNewIdcardALL(string imgfile_name, ref IDCARD idcard, bool bSaveResultFile, int nContent, string HeadImgFName);// 这是方法