在另一线程中调用IHTMLElement*的get_innerText方法时出现内存访问冲突

villers 2015-05-18 06:59:59
pEle->get_innerText(&bstr);时出现内存访问冲突的错误
但是用pEle->get_tagName(&bstr);却没有错误.

在主线程中调用pEle->get_innerText(&bstr);都可以

for( INT iCount = 0; iCount < lItem; iCount ++ )
{
V_I4(&varID) = iCount;

CComQIPtr<IDispatch> spDisp;

hr = spElemColl->item(varID, varIdx, &spDisp);

if (SUCCEEDED(hr) && spDisp)
{
CComQIPtr<IHTMLElement> spElem;

hr = spDisp->QueryInterface(IID_IHTMLElement, (void**)&spElem);

if (SUCCEEDED(hr))
{
BSTR bstrId = SysAllocString(L""),bstrtag= SysAllocString(L"");

POINT point;

BSTR bId= SysAllocString(L""),bText= SysAllocString(L""),bHtml= SysAllocString(L""),btagName = SysAllocString(L"");

spElem->get_tagName(&btagName);

CString strTempTagName(btagName);

if (strTempTagName.Compare("!") == 0)
{
continue;
}

point = GetElemPoint(spElem);

spElem->get_id(&bId);

//异常报错,更严重的是会造成内存泄露!
spElem->get_innerText(&bText);
spElem->get_innerHTML(&bHtml);
}
...全文
257 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
redui 2015-05-19
跨线程跨进程调用COM接口,必须首先列集和散列该接口,否则等同于找死
回复
zgl7903 2015-05-19
向导生成的MFC应用程序初始化COM是 COINIT_APARTMENTTHREADED 类型的, 因此如果要在线程中使用COM,线程中还得 CoIntializeEx(0, COINIT_APARTMENTTHREADED) 和 CoUninitialize
回复
发动态
发帖子
HTML/XML
创建于2007-09-28

3053

社区成员

VC/MFC HTML/XML
申请成为版主
社区公告
暂无公告