0

它有点工作,但问题是 MIME_PART 结构似乎没有初始化?即使我尝试打开不同的 mime 项目,它的所有属性都具有相同的值。

MIME_PART *pMime;
DHANDLE hPart; 
char *pText;
WORD textLen;
if (error = NSFMimePartGetPart(bidLinksItem, &hPart)) {
 goto exit;
}

pMime = OSLock(MIME_PART, hPart);
textLen = (pMime->wByteCount) - pMime->wHeadersLen - pMime->wBoundaryLen;
pText = (char *)pMime + sizeof(MIME_PART) + wHeadersLen;
char *itemText = (char *)malloc(textLen);       
memcpy(itemText, pText, textLen); 
itemText[textLen] = '\0';
OSUnlock(hPart);

itemText 字符串具有大部分内容,但由于未正确设置 MIME_PART 结构,因此指向文本的指针已关闭...

那么如何正确设置 MIME_PART 呢?

4

2 回答 2

1

你的代码应该做这样的事情:

DHANDLE hPart; 
char *pchPart;
if (error = NSFMimePartGetPart(bidLinksItem, &hPart)) {
  goto exit;
}

pchPart = OSLock(char, hPart);

换句话说,将句柄锁定为 typechar而不是 type MIME_PART。此时,pchPart指向原始部件数据的开头——从边界(如果存在)和标题开始。您可以使用NSFMimePartGetInfoByBLOCKID来获取边界和标题的长度。

我意识到这与文档相矛盾,但我已经与主题专家确认:文档是错误的。

于 2018-10-05T14:58:30.360 回答
0

错误的答案,但评论可能有用。我的另一个答案更正确。

这个问题可以改进。例如,当您尝试使用代码读取该数据时,您可以显示一些示例数据并描述结果。

但我会尽量根据我掌握的信息来回答。您计算的文本长度是这样的:

textLen = (pMime->wByteCount) - pMime->wHeadersLen - pMime->wBoundaryLen;

这在我看来是对的,但是你这样做:

pText = (char *)pMime + sizeof(MIME_PART) + wHeadersLen;

保证wHeadersLen等于? pMime->wHeadersLen另外,您没有考虑边界长度。你不应该这样计算地址吗?

pText = (char *)pMime + sizeof(MIME_PART) + pMime->wHeadersLen + pMime->wBoundaryLen;
于 2018-10-03T13:31:57.900 回答