首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

WIN7 IE8 BHO有关问题

2012-03-09 
WIN7 IE8 BHO问题我在WIN7用VB6编写了一个DLL.计划作为BHO监控浏览器使用,并且提供一些功能供页面调用该组

WIN7 IE8 BHO问题
我在WIN7用VB6编写了一个DLL.计划作为BHO监控浏览器使用,并且提供一些功能供页面调用该组件.可以在页面中用<object>标签创建实例.
大致代码如下:

VB code
'继承接口Implements olelib.IObjectWithSiteDim m_Site As olelib.IUnknownDim WithEvents m_ie As SHDocVw.InternetExplorer Private Sub IObjectWithSite_GetSite(riid As olelib.UUID, ppvSite As stdole.IUnknown)     m_Site.QueryInterface riid, ppvSiteEnd SubPrivate Sub IObjectWithSite_SetSite(ByVal pUnkSite As stdole.IUnknown)    On Error GoTo errorHand    If ObjPtr(pUnkSite) = 0 Then        CopyMemory m_ie, 0&, 4        Exit Sub    End If        Set m_Site = pUnkSite    Set m_ie = pUnkSite    'CopyMemory m_ie, pUnkSite, 4    Exit SuberrorHand:    MsgBox Err.DescriptionEnd Sub'初始化,在里创建data.txt文件,以检查组件是否被创建Private Sub Class_Initialize()    Dim f As Integer    f = FreeFile    Open "C:\data.txt" For Output As #f    Print #f, "测试"    Close #fEnd Sub..还有其他一些方法

编译成功后我将该DLL的classid添加到IE的BHO项下,在IE的程序管理中已经看到该组件,是启用状态,说明该BHO已经正常添加
接着我将IE的安全设置进行调整,允许了所有的ActiveX相关的设置,并且将指定的一个网站添加到信任站点.
然后我启动调试,VB自动打开刚才指定页面开始调试,该页面也有<object>标签引用到这个组件.

(1)而我在调试时,并没有触发到BHO的上述两个过程.
(2)然后让再让<object>调用该组件的方法,此时才触发了上述代码
(3)但是在setSite代码中,set m_ie=pUnkSite一句提示类型不匹配,无法运行下去,所以我尝试把那句改成下面的copymemory代码,执行通过
(4)但是得到的m_ie为nothing.
程序继续执行,<object>调用该组件的方法都正常执行,但是BHO中m_ie的相关事件都未触发.也就是BHO未生效,而<object>生效了.
这时我打开IE的"管理加载项",看到有一个与我组件名称相同,但DLL是vbdebug.dll的加载项.

然后退出调试,重新编译该组件(二进制兼容模式),在此编译过程中VB应该会自动注册该组件.
(5)编译成功后我再尝试手动注册该组件,但是提示注册失败,也不能注销.

(6)然后我打开IE,并没有弹出任何错误,但是在C盘下没有看到data.txt文件,也就是没有创建BHO实例.
(7)继续用<object>组件调用组件中的方法,浏览器提示"对象不支持此属性或方法,我再打开C盘,仍未看到data.txt文件,也就是实例示被创建.

上面遇到的问题多多,不知要如何解决这些问题.




[解决办法]
分又不能用来买包子。
关键是共享经验:什么原因?怎么解决的?
[解决办法]
可以试试 Win7 下将 UAC 关闭试试。
还有 杀毒/防火墙/HIPS 软件也可能有影响。
[解决办法]
windows7有时还真的不行
[解决办法]
节分,哈哈

热点排行