台式机上获取windwos mobile5中的联系人,包括sim卡上的,用MFC开发同步软件解决方案

台式机上获取windwos mobile5中的联系人,包括sim卡上的,用MFC开发同步软件
现在准备用MFC开发一个桌面软件,软件的作用是同步手机上数据,虽然Activesync能同步,但是我们想做个更方便的软件,让用户在计算机上通过该软件方面的操作手机上的数据,包括联系人,短信,文件等。但是现在遇到的问题是无法获取联系人和短信
我是新手,希望有这方面的经验的大侠们,帮帮忙,最好有现成的代码,因为项目很急~谢谢了
邮箱:babycc1988@163.com

谢谢~~

------解决方案--------------------
用IPOutlookApp可以取得OutLook联系人,sim联系人还得用系统的sim操作函数来取
最后通过rapi来调用dll的接口实现pc端获取mobile的数据
HRESULT hRes = -1;
BYTE *pbyTo = 0;
DWORD cbin = 0
DWORD pdwIn = 0;
BYTE *pbyOut = 0;

hRes = CeRapiInit();

hRes = CeRapiInvoke( SYNC_DEVICE_BASE_DLL_W, L"SendEmail",cbin, pbyTo, &pdwIn, &pbyOut , NULL, 0);

if( FAILED(hRes))
{
hRes = GetLastError();
printf("调用cerapiinvoke失败\n");
return S_FALSE;
}

CeRapiUninit();
------解决方案--------------------
bool ReadMsgInfo( IMessage *pMsg, CSMSMessageInfo& msgInfo)
{
ULONG ulValues = 0; 
assert( pMsg != NULL);
//读取短信Oid
SPropValue *pspvID = NULL;
SizedSPropTagArray(1, sptaID ) = { 1, PR_ENTRYID}; 
 
if ( FAILED( pMsg->GetProps((SPropTagArray *) &sptaID, MAPI_UNICODE, &ulValues, &pspvID)))
{
return false;
}
SBinary oid = pspvID->Value.bin;
 
if ( 0 == oid.cb)
{
return false;
}
 
msgInfo.Oid = BinToHexWStr(oid.lpb, oid.cb);

//读取短信内容
SPropValue *pspvSubject= NULL; 
SizedSPropTagArray(1, sptaSubject) = { 1, PR_SUBJECT}; 
 
if( SUCCEEDED( pMsg->GetProps((SPropTagArray *) & sptaSubject, MAPI_UNICODE, &ulValues, & pspvSubject)))
{
msgInfo.msgContent = PropValueToStr_W(*pspvSubject);
MAPIFreeBuffer( pspvSubject);
}

//读取短信发送人号码
SPropValue *pspvFromTel = NULL;
SizedSPropTagArray(1, sptaFromTel) = { 1, PR_SENDER_EMAIL_ADDRESS};

if( SUCCEEDED( pMsg->GetProps((SPropTagArray *) &sptaFromTel, MAPI_UNICODE, &ulValues, & pspvFromTel)))
{
msgInfo.sender = PropValueToStr_W(*pspvFromTel);
MAPIFreeBuffer( pspvFromTel);
}

//读取短信接收人号码
ADRLIST *pstToRows = NULL;
IMAPITable *pTableContact = NULL;

if (SUCCEEDED( pMsg->GetRecipientTable( NULL, &pTableContact)))
{
while ( !FAILED( pTableContact->QueryRows(1,0,(LPSRowSet*)&pstToRows)))
{
if( 0 == pstToRows->cEntries)
{
break;
}
for ( unsigned long n = 0; n < pstToRows->cEntries; n ++)
{
//遍历每个联系人属性
for( unsigned long i = 0; i < pstToRows ->aEntries[n].cValues ; i ++)
{
//判断如果是PR_EMAIL_ADDRESS属性,那么就找到了联系人地址
if( PR_EMAIL_ADDRESS == pstToRows ->aEntries[n].rgPropVals[i].ulPropTag )
{
//联系人地址
if ( L"" == msgInfo.recipients)
{
msgInfo.recipients = pstToRows ->aEntries[n].rgPropVals[i].Value.lpszW;
}
else
{
msgInfo.recipients += L",";
msgInfo.recipients += pstToRows ->aEntries[n].rgPropVals[i].Value.lpszW;
}
}
}

}
MAPIFreeBuffer(pstToRows);
}
pTableContact->Release();
pTableContact = NULL;
}

//读取短信时间
SPropValue *pspvTime = NULL;