首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

IE自动填表的操作,总是报错!该怎么处理

2012-01-28 
IE自动填表的操作,总是报错!使用的MFC添加webbrowser控件,还添加了dhtml,加入了不少包装类,从网上找了一堆

IE自动填表的操作,总是报错!
使用的MFC添加webbrowser控件,还添加了dhtml,加入了不少包装类,从网上找了一堆代码,东拼西凑的,又是包装类,又是智能指针,
下面的代码是在工作线程中,运行的前三次都可以正常输入账号密码,确定,但是到了第四次的时候,再输入账号就会报错,在下面有注释,对这些原理都不是很懂,大概猜测是不是资源没有释放,尝试在pIDisp->Release(),放入几个语句后面,结果也是错误百出,请教一下,下面的代码,存在什么隐患,如何来解决,或者如何优化下代码??

报错的提示是:unhandled exception in **.exe :0xC00000005 :Accees violation,点击确定后,跳转到的页面 namespace ATL ,代码
ATLINLINE ATLAPI_(IUnknown*) AtlComPtrAssign(IUnknown** pp, IUnknown* lp)
{
if (lp != NULL)
lp->AddRef(); //指向这一行
if (*pp)
(*pp)->Release();
*pp = lp;
return lp;
}

C/C++ code
CComPtr<IWebBrowser2> spBrowser;CoGetInterfaceAndReleaseStream(pDlg->m_pStream,IID_IWebBrowser2,(LPVOID*)&spBrowser); // 散列获得浏览器代理接LPDISPATCH pIDisp;CHTMLElement htmle;CHTMLDocument2 htmlDoc; CHTMLFormElement htmlfe;CHTMLElementCollection htmlec;_variant_t vName;_variant_t vIndex;CComDispatchDriver spInputElement;while(readFile.ReadString(account)){     ......省略若干不相关操作     spBrowser->get_Document(&pIDisp);     htmlDoc=pIDisp;       htmlec=htmlDoc.GetForms();  //获得表单集合         vIndex=(long)0;     htmlfe=htmlec.item(vName,vIndex);     pIDisp=htmlfe.item(CComVariant(2), CComVariant());   //这里第四次就会出错   取得第2项表单域 账号     spInputElement=pIDisp;     vSetStatus=account;     spInputElement.PutPropertyByName(L"value", &vSetStatus);     pIDisp=htmlfe.item(CComVariant(3), CComVariant());   //取得第3项表单域 密码     spInputElement=pIDisp;                 vSetStatus=password;     spInputElement.PutPropertyByName(L"value", &vSetStatus);     htmle=htmlfe.item(CComVariant(4), CComVariant());     //确定啦                 pDlg->m_bDocComplete=FALSE;     htmle.click();             ......省略若干操作}


[解决办法]
查看下面的“ 从 VC7 的 CHtmlView 不能正常退出谈 CComPtr 使用中的一个误区”
http://blog.csdn.net/jonfei/archive/2007/10/25/1843284.aspx

我看了下,跟你这里写的错误代码是一样的,这里提到了如何修改
[解决办法]
你可以创建一个线程,在这个线程中进行sendmess,这样就不会影响程序的响应了。我也曾经遇到过类似的问题,单独在形成中执行会初相各种异常,例如访问冲突,CComQIptr释放不成功,如果我采用sendmessage的方法,发送消息到主线程后处理,问题自然就没了,其中缘由我也不解。

热点排行