买手机,上口袋! UC浏览器官网下载 注册| 登录| 导航| 帮助
西安索尔-高端智能手机+实体店 HKC系列皮套火热上市 广州商家QQ群:27893394 锐博数码-成都多普达专卖+专业维修
杜绝病毒,UC浏览器官方下载 杜绝病毒,UCWEB7.3官方下载 杜绝病毒,UC浏览器7.3官方下载 诚信商家优质服务
返回列表 回复 发帖

如何通过CEMAPI读取并正确显示EMAIL的内容?

如何通过CEMAPI读取并正确显示EMAIL的内容?

http://msdn.microsoft.com/librar ... l/ppc_2002part2.asp
我按照上面文章介绍的方法编译了MAPI2这个PROJECT,我的编译环境是EVC4.0+pocket pc 2003,
编译可以通过,但是在执行的时候出现了奇怪的现象:我第一次读取一封邮件的时候,能够正确
显示出该邮件的内容,但是当我选择另一封内容比第一封短的邮件时,我发现这封邮件的内容
显示不正确了,它显示的内容比他本身的内容多出一些字符,这些多出的字符与前一封长的邮件有关,
我把邮件显示的代码抄在下面,大家帮我分析一下,是否存在问题?

LPCTSTR CVOMAPIMessage::GetBody()
{
        IStream*        pStream;
        char                szBuf[255];
        ULONG                ulNumChars;
        CString                strBody;
        HRESULT                hr;

        hr = m_pMessage->OpenProperty(PR_BODY, &IID_IStream, STGM_READ, NULL,(LPUNKNOWN *) &pStream);
        EXIT_ON_FAILED(hr);

        do
        {
                pStream->Read(szBuf, 255, &ulNumChars);
                if (ulNumChars >0)
                {
                        static CString strBodyPart;

                        memmove(strBodyPart.GetBuffer(ulNumChars), szBuf, ulNumChars);
                        strBodyPart.ReleaseBuffer(ulNumChars);

                        strBody += strBodyPart;
                }
        } while (ulNumChars >= 255);
        MAPIAllocateBuffer(sizeof(SBinary) + (sizeof(TCHAR) * (strBody.GetLength() + 1)), (LPVOID*)&m_propBody );
        m_propBody->dwAlignPad = 0;
        m_propBody->ulPropTag = PR_BODY;
       
        m_propBody->Value.lpszW = (LPTSTR)(m_propBody + 1);        // Set to byte immediately after structure header

        _tcscpy(m_propBody->Value.lpszW, strBody);

        return m_propBody->Value.lpszW;

FuncExit:
        return TEXT("");
}
你先看读取出来的内容是否正确,正确的话,那就只是更新显示的问题。
我在调试过程中,跟踪了字符串的内容,发现第一次读取的时候有时候是正确的字符,有时候会多一些奇怪的字符,比如问号或者MAPI之类的,大家有兴趣也编译一下,看看这个MSDN的文章是不是有BUG?
那就添加个检查结束符的语句
主要是分配了一快内存后下次用的是同一块没释放的内存造成的!
好歹是在做wince
返回列表