用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。
Tags:VisualStudio 生成 浏览器
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接