用VisualStudio2005生成浏览器帮助对象(BHO)

豆豆网   技术应用频道   2007年03月15日    社区交流

本文详细介绍用VisualStudio2005生成浏览器帮助对象(BHO)

  HelloWorld.cpp

  加载 DLL 后,系统将通过 DLL_PROCESS_ATTACH 通知调用 DllMain 函数。由于 Internet Explorer 大量使用多线程,因此,对 DllMain 的频繁的 DLL_THREAD_ATTACH 和 DLL_THREAD_DETACH 通知会降低扩展和浏览器进程的整体性能。既然该 BHO 不需要线程级的跟踪,我们可以在 DLL_PROCESS_ATTACH 通知期间调用 DisableThreadLibraryCalls 以避免新线程通知的额外开销。

  在 HelloWorld.cpp 中,如下编写 DllMain 函数的代码:

以下是引用片段:
  extern"C"BOOLWINAPIDllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved)
  {
  if(dwReason==DLL_PROCESS_ATTACH)
  {
  DisableThreadLibraryCalls(hInstance);
  }
  return_AtlModule.DllMain(dwReason,lpReserved);
  }

  注册 BHO

  剩下要做的只是将 BHO 的 CLSID 添加到注册表中。此条目会将 DLL 标记为浏览器帮助程序对象,并使 Internet Explorer 在启动时加载 BHO。Visual Studio 可在生成项目时注册 CLSID。

  注意 在 Windows Vista 上,Visual Studio 需要提升的特权才能与注册表进行交互。请确保通过在“开始”菜单中右键单击 Microsoft Visual Studio 2005 并选择“以管理员身份运行”来启动开发环境。

  此 BHO 的 CLSID 可在 HelloWorld.idl 中找到(位于如下所示的代码块中):

以下是引用片段:
  importlib("stdole2.tlb");
  [
  uuid(D2F7E1E3-C9DC-4349-B72C-D5A708D6DD77),
  helpstring("HelloWorldBHOClass")
  ]

  请注意,此文件包含三个 GUID;我们需要的是用于类的 CLSID,而不是用于库的 CLSID 或接口 ID。

来源:微软    作者:Tony Schreiner,John Sudds    责编:豆豆技术应用

正在加载评论...