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


- UID
- 477394
- 帖子
- 4
- 精华
- 0
- 积分
- 0
- 技术
- 0
- 资源
- 0
- 信用
- 0
- 口袋币
- 7
- 注册时间
- 2006-7-6
|
1楼
发表于 2006-08-08 09:45:37
| 只看该作者
如何通过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("");
} |
|
|
|
|
|
口袋二段

 
- UID
- 424737
- 帖子
- 97
- 精华
- 0
- 积分
- 5
- 技术
- 0
- 资源
- 1
- 信用
- 0
- 口袋币
- 129
- 注册时间
- 2006-6-4
|
2楼
发表于 2006-08-08 10:14:37
| 只看该作者
| 你先看读取出来的内容是否正确,正确的话,那就只是更新显示的问题。 |
|
|
|
|
|
口袋一段


- UID
- 477394
- 帖子
- 4
- 精华
- 0
- 积分
- 0
- 技术
- 0
- 资源
- 0
- 信用
- 0
- 口袋币
- 7
- 注册时间
- 2006-7-6
|
3楼
发表于 2006-08-08 10:28:00
| 只看该作者
| 我在调试过程中,跟踪了字符串的内容,发现第一次读取的时候有时候是正确的字符,有时候会多一些奇怪的字符,比如问号或者MAPI之类的,大家有兴趣也编译一下,看看这个MSDN的文章是不是有BUG? |
|
|
|
|
|
口袋二段

 
- UID
- 96806
- 帖子
- 168
- 精华
- 0
- 积分
- 7
- 技术
- 0
- 资源
- 0
- 信用
- 0
- 口袋币
- 195
- 注册时间
- 2005-3-13
|
4楼
发表于 2007-01-29 20:18:18
| 只看该作者
那就添加个检查结束符的语句
主要是分配了一快内存后下次用的是同一块没释放的内存造成的! |
|
|
|
|
|