关于BSTR 以及 memcpy的问题.
我的部分程序如下:
BSTR bText;
char nItem[10];
char ProcessName[20], strUser[20], strClass[20], strDescription[1024];
CEditProcessInfo *info = (CEditProcessInfo*)lpVoid;
MSXML2::IXMLDOMNodePtr m_pOneNode;
MSXML2::IXMLDOMNodeListPtr m_pOneNodeList;
MSXML2::IXMLDOMNodePtr m_pTwoNode1, m_pTwoNode2, m_pTwoNode3, m_pTwoNode4;
for (int i = 0; i < nLength; i ++)
{
m_pNodeList->get_item(i, &m_pOneNode);
m_pOneNode->get_childNodes(&m_pOneNodeList);
//AllocSysString
m_pOneNodeList->get_item(0, &m_pTwoNode1);
m_pOneNodeList->get_item(1, &m_pTwoNode2);
m_pOneNodeList->get_item(2, &m_pTwoNode3);
m_pOneNodeList->get_item(3, &m_pTwoNode4);
try
{
memset(&ProcessName, 0 ,sizeof(ProcessName));
memset(&strUser, 0 ,sizeof(strUser));
memset(&strClass, 0 ,sizeof(strClass));
memset(&strDescription, 0 ,sizeof(strDescription));
m_pTwoNode1->get_text(&bText);
memcpy(ProcessName, _com_util::ConvertBSTRToString(bText), sizeof(ProcessName));
m_pTwoNode2->get_text(&bText);
memcpy(strUser, _com_util::ConvertBSTRToString(bText), sizeof(strUser));
m_pTwoNode3->get_text(&bText);
memcpy(strClass, _com_util::ConvertBSTRToString(bText),sizeof(strClass));
//int nL =sizeof (Description);
//_com_util::ConvertBSTRToString(bText)
m_pTwoNode4->get_text(&bText);
memcpy(strDescription, _com_util::ConvertBSTRToString(bText), sizeof(strDescription));//程序运行到这个地方出错,我把memcpy换成strcpy 时确完全真确,或者干脆去掉_com_util::ConvertBSTRToString(bText), 替换成"hello"时,也没报运行错误.所以我怀疑是 bText有问题,但不知道是什么问题.先谢谢大家了*/
}
catch(_com_error e)
{
//AfxMessageBox(e.Description());
}
//Release
if (strcmp(strUser, "SYSTEM"))
{
strcpy(strUser, szUserName);
}
info->m_list.InsertItem(i, ProcessName);
info->m_list.SetItemText(i, 1, strUser);
info->m_list.SetItemText(i, 2, strClass);
info->m_list.SetItemText(i, 3, strDescription);
sprintf(nItem, "%d", i);
info->m_list.SetItemText(i, 4, nItem);
}