gpt4 book ai didi

c++ - SHDocVw::IShellWindowsPtr 在 IE8 下失败? (错误 0x80040154)

转载 作者:行者123 更新时间:2023-11-30 02:02:14 25 4
gpt4 key购买 nike

我的程序是一个挂接到正在运行的 IE 实例的 dll。多年来一直运行良好。

最近我将它除尘并运行它,但下面的最后一行失败并显示 hr = 0x80040154:

#import <mshtml.tlb>     rename("value", "theValue") rename("event", "theEvent")
#import <shdocvw.dll>

// ....

SHDocVw::IShellWindowsPtr spSHWinds;
HRESULT hr = m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));

IE7 已被 IE8 取代是否重要?我还应该看哪里?

如果重要的话,我正在使用 VS2008。

编辑添加

我看不出这可能是 32/64 位问题 - 它去年在同一台机器上运行良好。唯一改变的(据我所知)是 IE 的版本,从 7 到 8。

赏金猎人须知:

我每天只能访问该系统几个小时(美国东部标准时间 0:00 左右),因此您可能无法快速回复您的建议,但我调查它们。

如果您认为我应该检查哪些内容(例如注册表值),请具体说明。

编辑添加:

我现在看到,第一次我调用 CreateInstance 时,它​​返回 0x80070002,而不是 0x80040154。

最佳答案

这将非常难以诊断。 ShellWindows coclass 比较特殊,其 CLSID 注册表项为 HKEY_CLASSES_ROOT\CLSID\{9BA05972-F6A8-11CF-A442-00A0C90A8F39}。当你看那里时,你会发现那里没有注册任何有用的东西。背景故事是,这是使 Windows 外壳类似于 Web 浏览器的不幸尝试的遗留问题。今天仍然可见,枚举 shell 窗口返回 Windows Explorer 和 Internet Explorer 实例。

SysInternals 的 ProcMon 实用程序几乎总是调试 0x80040154 错误的首选武器,但它在这里表现平平。您可以看到它正在探测注册表,但没有找到它要查找的内容,但是程序无论如何都知道如何加载 ieframe.dll。这只能通过操作系统拦截 CoCreateInstance() 调用来工作。考虑到 coclass 枚举 shell 窗口,这通常是有道理的。

剩下的就是试错法了。先重装IE,再重装操作系统。或者在机器占用您太多宝贵时间之前将机器推出 4 层楼的 window 。

关于c++ - SHDocVw::IShellWindowsPtr 在 IE8 下失败? (错误 0x80040154),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13468784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com