请问SHDocVw::IWebBrowser2接口和IWebBrowser2接口有何区别?如何转换?

跑在路上 2009-05-22 04:50:58
先执行这样一段代码后(我用了HttpWatch)
HttpWatch::ControllerClass control;
HttpWatch::Plugin ^pg=control.New();
pg->Log->EnableFilter(false);
pg->Record();
CString url;m_eUrl.GetWindowTextW(url);
pg->GotoURL("www.baidu.com");
control.Wait(pg,-1);
pg->Stop();
得到一个SHDocVw::IWebBrowser2对象pg->Container,我想通过它得到一个IHTMLDocument2对象,但这个pg->Container没有QueryInterface这个方法,所以感觉SHDocVw::IWebBrowser2和单独的IWebBrowser2不是同一种接口,它们能相互转换吗?如何从SHDocVw::IWebBrowser2得到IHTMLDocument2对象?望高手指教!
...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2009-06-06
  • 打赏
  • 举报
回复
非托管接口及其托管封装类的关系。
oyljerry 2009-05-25
  • 打赏
  • 举报
回复
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
if (m_spSHWinds == NULL)
{
if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
{
MessageBox("Failed");
CoUninitialize();
}
}
if (m_spSHWinds)
{
int n = m_spSHWinds->GetCount();
for (int i = 0; i < n; i++)
{
_variant_t v = (long)i;
IDispatchPtr spDisp = m_spSHWinds->Item(v);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //生成一个IE窗口的智能指针
if (spBrowser)
{
//获取IHTMLDocument2接口
if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))
pDoc2 = spDispatch;
if(pDoc2!=NULL)
{
// AfxMessageBox("已经获取IHTMLDocument2");
if (SUCCEEDED(pDoc2->get_forms(&pElementCol)))
{
// AfxMessageBox("已经获取IHTMLElementCollection");
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p)))
if(p!=0)
{
for(long i=0;i<=(p-1);i++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
{
// AfxMessageBox("已经获取IHTMLFormElement");

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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