通过Visual Studio 2005生成浏览器帮助程序对象
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:本文说明如何使用Visual Studio 2005创建一个简单的“浏览器帮助程序对象”(BHO),即实现IObjectWithSite接口并将其自身附加到Internet Explorer的一种“组件对象模型”(COM)对象。本文逐步说明了如何创建入门级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" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
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("HelloWorldBHO Class")
]
请注意,此文件包含三个 GUID;我们需要的是用于类的 CLSID,而不是用于库的 CLSID 或接口 ID。
来源:51CTO 作者:John Sudds 责编:豆豆技术应用