您的位置:首页 > 其它

短信留在发件箱里面无法发送问题

2010-05-20 21:57 232 查看
最近碰到某个WM手机无法MAPI程序发短信的问题,短信一直留在发件箱里面无法发送,但系统的程序的确是可以的,分析了一下,可能是MAPI调用的问题,但无论怎么改设置过的字段和内容都无法解决。想了一下,打算模拟系统发短信的过程,既然是模拟首先得知道系统是怎么发,发了什么内容。所以第一步,得做一个MAPI监控对象:

监控一下短信:

void CXXXX::RegSMSSink()

{

HRESULT hr = S_OK;

//CdingStar: 把想得到的字段都加上,看系统是怎么变的:

ULONG uEventMask = fnevNewMail | fnevObjectCreated | fnevObjectDeleted |fnevObjectMoved |

fnevObjectModified | fnevObjectCopied | fnevTableModified | fnevStatusObjectModified | fnevReservedForMapi | fnevExtended | fnevCriticalError ;

//CdingStar: 这里新建一个短信对象 class CSMSAdviseSink : public IMAPIAdviseSink{...}

m_pSink = new CSMSAdviseSink();

//SMS Store

ASSERT(m_pMsgStore);

if(m_pMsgStore && m_pSink)

{

m_pSink->SetMsgStore(m_pMsgStore);

hr = m_pMsgStore->Advise(0, NULL, uEventMask, m_pSink, &m_ulAdviseSink); //注册接口

}

}

重载SMS SINK消息接收通知:

MAPIMETHOD_(ULONG,OnNotify)(ULONG cNotif, LPNOTIFICATION lpNotifications);

ULONG CSMSAdviseSink::OnNotify(ULONG cNotif, LPNOTIFICATION lpNotifications)

{

for(int i = 0; i < (int)cNotif; ++i)

{

//Message变化的类型,如新建短信,删除短信,修改

switch(lpNotifications[i].ulEventType)

{

case fnevObjectCreated:

//不知何故pNotify->lpEntryID的EntryID居然和pMessage里面query到的EntryID不一样

break;

case fnevObjectDeleted:

break;

case fnevObjectMoved:

break;

case fnevObjectModified:

//CdingStar:修改的变化主要就这里,得查看系统发送时候修改了什么

//lpNotifications[i].info.obj.lpPropTagArray是发生改变的属性值列表

//后面的等下再加,貌似调试发现2个过程结果差异很大啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: