WEB开发网
开发学院软件开发VC 用VisualStudio2005生成浏览器帮助对象(BHO) 阅读

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

 2007-03-15 21:46:38 来源:WEB开发网   
核心提示: HelloWorld.cpp加载 DLL 后,系统将通过 DLL_PROCESS_ATTACH 通知调用 DllMain 函数,用VisualStudio2005生成浏览器帮助对象(BHO)(5),由于 Internet Explorer 大量使用多线程,因此,此 BHO 的 CLSID

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。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:VisualStudio 生成 浏览器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接