首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> VC.NET >> 正文

用VisualStudio2005生成浏览器帮助对象

  8.单击“完成”。

  以下文件将作为此项目的一部分创建。

  •HelloWorldBHO.h – 此头文件包含 BHO 的类定义。

  •HelloWorldBHO.cpp – 此源文件是项目的主文件并且包含 COM 对象。

  •HelloWorld.cpp – 此源文件用于实现通过 DLL 提供 COM 对象的导出。

  •HelloWorld.idl – 此源文件可用于定义自定义 COM 接口。对于本文,我们将不更改此文件。

  •HelloWorld.rgs – 此资源文件包含注册和取消注册 DLL 时编写和删除的注册表项。

实现基本要素

  “ATL 项目向导”提供了 SetSite 的默认实现。尽管 IObjectWithSite 的接口合约暗示了此方法可以在必要时被反复调用,但确切来说,Internet Explorer 只调用此方法两次;一次用于建立连接,另一次则是在浏览器退出时。特别要提的是,我们 BHO 中的 SetSite 实现将执行以下操作:

  •存储对站点的引用。在初始化期间,浏览器将 IUnknown 指针传递给顶层 WebBrowser 控件,然后 BHO 将对它的引用存储在一个专用成员变量中。

  •释放目前被占用的站点指针。Internet Explorer 传递 NULL 时,BHO 必须释放所有接口引用并且断开与浏览器的连接。

  在处理 SetSite 的过程中,BHO 将根据需要执行其他初始化和非初始化。例如,您可以建立与浏览器的连接点以便接收浏览器事件。

  HelloWorldBHO.h

  在 Visual Studio 的“解决方案资源管理器”中双击打开 HelloWorldBHO.h。

  首先,包含 shlguid.h。此文件定义了 IWebBrowser2 的接口标识符和稍后在项目中使用的事件。

  #include // IID_IWebBrowser2、DIID_DWebBrowserEvents2 等。

  接下来,在 CHelloWorldBHO 类的公共部分声明 SetSite。

  STDMETHOD(SetSite)(IUnknown *pUnkSite);

  STDMETHOD 宏是一个将方法标记为虚拟方法并且确保其具有适用于公共 COM 接口的调用约定的 ATL 约定。它有助于区分 COM 接口和该类中可能存在的其他公共方法。实现成员方法时同样也会使用 STDMETHODIMP 宏。

  最后,在类声明的专用部分中声明某成员变量以存储浏览器站点。

以下是引用片段:
  private:
  CComPtr m_spWebBrowser;
  HelloWorldBHO.cpp
  现在,切换到 HelloWorldBHO.cpp 并为 SetSite 插入以下代码。
  STDMETHODIMP CHelloWorldBHO::SetSite(IUnknown* pUnkSite)
  {
  if (pUnkSite != NULL)
  {
  // 缓存指向 IWebBrowser2 的指针。
  pUnkSite->QueryInterface(IID_IWebBrowser2, (void**)&m_spWebBrowser);
  }
  else
  {
  // 在此释放缓存的指针和其他资源。
  m_spWebBrowser.Release();
  }
  // 返回基类实现
  return IObjectWithSiteImpl::SetSite(pUnkSite);
  }

  初始化期间,浏览器将传递一个对其顶层 IWebBrowser2 接口(我们对其进行缓存处理)的引用。非初始化期间,浏览器将传递 NULL。为避免内存泄漏和循环引用计数,此时释放所有指针和资源非常重要。最后,我们调用基类实现以便它可以履行接口合约的其余部分。

 

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航