• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > ATL显示网页标题出错,请高手给出代码或实例指点

ATL显示网页标题出错,请高手给出代码或实例指点

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atl,atl71.dll,atl100.dll下载,atl71.dll修复,穿越火线atl71.dll等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ATL显示网页标题出错,请高手给出代码或实例指点
描述:

我做了一个BHO想在页面一打开时,就想可以获取这个打开网页的标题,测试的时候,打开第一个网页没有问题,在网页上点击弹出新的窗口时也没有
问题,但是如果在当前的窗口中打开新的网页就会出问题了,怎么也排除不了:难,实在是难!小弟低三下气求助中
本人开发的代码是这样的:
// EyeOnIE.cpp : Implementation of CEyeOnIE
#include "stdafx.h"
#include "Cctv.h"
#include "EyeOnIE.h"
#include "stdafx.h"
#include "resource.h"
#include "msHtml.h"
#include "ExDispID.h"// DWebBrowserEvents2 所需要的头文件
#include "atlcom.h"
#include "atlbase.h"
#include "winuser.h"
#include "comdef.h"
/////////////////////////////////////////////////////////////////////////////
// CEyeOnIE
STDMETHODIMP CEyeOnIE::SetSite(IUnknown *pUnkSite)
{
// TODO: Add your implementation code here
USES_CONVERSION;
if(pUnkSite)
{
mWebBrowser2=pUnkSite;
if(mWebBrowser2)
{
return RegisterEventHandler(TRUE);
}
}
return E_FAIL;
}
HRESULT CEyeOnIE::RegisterEventHandler(BOOL inAdvise)
{
//下面这段代码经过测试和下面的测试代码具有相关性,可能这里也会出发问题
//DWORD mCookie;
//CComQIPtr<IWebBrowser2, &IID_IWebBrowser2>mWebBrowser2;
CComPtr<IConnectionPoint>spCP;
CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer>m_spCPC(mWebBrowser2);
HRESULT hr=m_spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&spCP);
if(FAILED(hr))
return hr;
if(inAdvise)
{
hr=spCP->Advise(reinterpret_cast<IDispatch*>(this), &mCookie);
}
else
{
spCP->Unadvise(mCookie);
}
return S_OK;
}
//第三部分
STDMETHODIMP CEyeOnIE::Invoke(DISPID dispidMember,REFIID riid, LCID lcid, 
WORD wFlags, DISPPARAMS * pDispParams, 
VARIANT * pvarResult,EXCEPINFO * pexcepinfo, 
UINT * puArgErr)
{ 
USES_CONVERSION;
if (!pDispParams)
return E_INVALIDARG;
switch (dispidMember)
{
case DISPID_BEFORENAVIGATE2:
break;
case DISPID_NAVIGATECOMPLETE2:
break;
case DISPID_DOCUMENTCOMPLETE:
{
//-------------------测试一:下面这个方法获取标题已经成功了,但是存在一个错误框
//经过实际测试是if (SUCCEEDED(mWebBrowser2->get_Document( &pDisp)))导致的问题
//主要是在打开新窗口的时候出现问题的,估计的原因是不能将这种获取方式放在BHO中,或者事件中
//因为每打开一个新的窗口就会重新获取一次,而前次的没有释放,后面一次又要重新赋值,所以会出错
//采取的实验二,是释放所有变量,把mWebBrowser2和pDisp释放,然后看看
//要定义OnDocumentComplete();和m_bDocumentCompleted = true;
if (mWebBrowser2!=NULL)
{
if (SUCCEEDED(mWebBrowser2->get_Document( &pDisp)))
{
USES_CONVERSION;
m_spHTML = pDisp;
if (m_spHTML!=NULL)
{
CComBSTR bstrTitle;
m_spHTML->get_title( &bstrTitle );//取得文档标题
//OLE2CT( bstrTitle )
::MessageBox(NULL, _T("终于成功了"),_T("一定成功"),MB_ICONINFORMATION);
//下面释放资源
if (m_spHTML!=NULL)
m_spHTML==NULL;
if (mWebBrowser2!=NULL)
mWebBrowser2.Release;
if (pDisp)
pDisp.Release;
//pUnkSite.Release;
//return S_OK;
}
}
}
break;
}
case DISPID_ONVISIBLE:
break;
case DISPID_QUIT:
//RegisterEventHandler(FALSE);
break;
default:
break;
}
return S_OK;
}
--------------------------------------------------------------------------------------------
下面是在IE中运行程序是出现的状况如下:
我这里运行会出错:
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!
Program: ...d Settings\Administrator\桌面\Mimefilter\Debug\Mimefilter.exe
File: d:\program files\microsoft visual studio\vc98\atl\include\atlbase.h
Line: 469
Expression: p==0
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
终止(A)   重试(R)   忽略(I)   
---------------------------


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 为什么用向导生成的ATLCOM工程(dll)没有dlldatac文件
  • 关于用ATL开发office插件
  • 疑惑:如何使用通过atl工程编写的类接口
  • ATL怎么实现可变参数的接口?
  • codeproject上的经典代码,ATL做OPENGL控件,为什么不能在VB环境下正常工作,如何改进
  • VC的ATL编COM组件,Com之间调用问题
  • 要用atl写个控件,涉及到界面的,怎么将wtl和atl结合起来用呐?用wtl来做控件的界面
  • ATL实现office插件问题?
  • 谁能帮我看一下关于ATL编写COM组件
  • 在ATL中不能用#import导入excel9olb文件么??

相关文章

  • 2017-06-05 怎么引用dll中的函数啊,怎么加载dll?
  • 2017-06-04 用IOleInPlaceObjectWindowlessImpl实现的ACTIVEX无法刷新
  • 2017-06-04 还是COM问题
  • 2017-06-05 VC++60mfc与matlab70混合编程调用算法工具箱(如SVM)
  • 2017-06-04 sqlite3数据库,怎么插入一个已知的时间?求助
  • 2017-06-04 自己写的IEband怎么升级?
  • 2017-06-04 用VC写个图片验证怎么写请高手指教???
  • 2017-06-04 方法调用出问题!!!
  • 2017-06-04 我做了一个active按钮的控件,然后在容器中调用多个按钮,怎么来判别是哪个按钮被按下了呢~~~~~~
  • 2017-06-04 MSComm控件

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 初学者:用VC写COM需要知道那些东西?与普通的dll有何不同,ATLCOM是啥???
    • 我的调试信息中出现大量的信息,如何去掉
    • 请问如何在VC60上调用VS2005NET上的DataGridView控件,该怎么做?难道要对其进行封装成ActiveX控件?
    • 如何在IE中显示类似Form的资源?
    • 得到进程的ID后,如何获得该进程的名称?
    • 各位大虾,谁知道如何截取打印队列中打印的内容,高分相报,谢谢!
    • 如何通过串口发送一个文件到单片机上?
    • 如何让一个COM接口返回DOUBLE型指针
    • CAB安装时DLL时,浏览器崩溃
    • com编程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有