请教 多线程中 CWebBrowser2 的问题

xiaowulai 2006-12-13 03:00:59
请教 CWebBrowser2 的问题
程序在MFC 基于对话框底下写的
在OnInitDialog()函数中先创建CWebBrowser2 对象m_web(是全局变量),然后Navigate2连接一个邮箱的网业
在一个按钮函数中对网页元素分析 填写用户名和密码并执行登陆
这样写没什么问题(用IHTMLElementCollection 和 IHTMLDocument2 对网页分析的)

但如果我把 "对网页元素分析 填写用户名和密码并执行登陆" 放到一个线程里面去,按钮函数去创建那个线程,运行时 填写用户名和密码没错 , 但 执行登陆时就出错了(我将登陆注释掉试过不会出错 用户名密码可以填写)

是不是因为登陆时网页跳转的缘故 应该怎么办 谢谢

线程函数
DWORD WINAPI ThreadFunc( LPVOID lpParam )
{
IHTMLElementCollection *objAllElement=NULL;
IHTMLDocument2 *objDocument = NULL;
objDocument = (IHTMLDocument2 *)m_web.GetDocument();
objDocument->get_all(&objAllElement);

PutIEText(objAllElement,。。。);//填写用户名
PutIEText(objAllElement,。。。);//填写密码
SubmitPage(objAllElement,。。。);//登陆

return 0;
}
...全文
371 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbird 2007-01-19
  • 打赏
  • 举报
回复
是不是工作线程COM没初始化
蒋晟 2006-12-26
  • 打赏
  • 举报
回复
msdn.microsoft.com/msdnmag/issues/1100/wicked/
LiChenYue 2006-12-24
  • 打赏
  • 举报
回复
要么就象楼上说的那样Marshal一把,要么就把整个CWebBrowser都放到线程里面创建
------------------------------------------------------------------------------
为什么?
superarhow 2006-12-14
  • 打赏
  • 举报
回复
要么就象楼上说的那样Marshal一把,要么就把整个CWebBrowser都放到线程里面创建
蒋晟 2006-12-14
  • 打赏
  • 举报
回复
use CoMarshalInterThreadInterfaceInStream and CoGetInterfaceAndReleaseStream to marshal the interface pointer to the worker thread.
xiaowulai 2006-12-14
  • 打赏
  • 举报
回复
void PutIEText(IHTMLElementCollection *pobjAllElement,CString strName,CString strText)
{
CComPtr<IDispatch>pDisp;
pobjAllElement->item(COleVariant(strName),COleVariant((long)0),&pDisp);
CComQIPtr<IHTMLInputTextElement,&IID_IHTMLInputTextElement> pElement;
if(pDisp==NULL)
{
//AfxMessageBox(strName + " 没有找到1!");
return;
}
else
{
pElement=pDisp;
pElement->put_value(strText.AllocSysString());
}
}

void SubmitPage(IHTMLElementCollection *pobjAllElement,CString strName)
{
CComPtr<IDispatch> pDisp;
pobjAllElement->item(COleVariant(strName),COleVariant((long)0),&pDisp);
CComQIPtr<IHTMLElement,&IID_IHTMLElement> pElement;
if(pDisp==NULL)
{
//AfxMessageBox(strName + " 没有找到2!");
return;
}
else
{
pElement=pDisp;
pElement->click();
}
}

这是注释的两个函数 网上看到的
xiaowulai 2006-12-14
  • 打赏
  • 举报
回复
谢谢 我试试
lion_wing 2006-12-13
  • 打赏
  • 举报
回复
注释的登陆的那部分代码是什么?

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧