在另一线程中调用IHTMLElement*的get_innerText方法时出现内存访问冲突,该怎么处理

在另一线程中调用IHTMLElement*的get_innerText方法时出现内存访问冲突
本帖最后由 VisualEleven 于 2015-05-18 19:12:31 编辑
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);
}

------解决思路----------------------
向导生成的MFC应用程序初始化COM是 COINIT_APARTMENTTHREADED 类型的,
因此如果要在线程中使用COM,线程中还得 CoIntializeEx(0, COINIT_APARTMENTTHREADED) 和 CoUninitialize  
------解决思路----------------------
跨线程跨进程调用COM接口,必须首先列集和散列该接口,否则等同于找死