【问题标题】:Running activex dll fromVB6 under windows 7windows 7下从VB6运行activex dll
【发布时间】:2010-11-22 09:45:45
【问题描述】:
我正在为一个用 VB6 编写的旧管理工具添加一些功能。该工具使用 c++ activeX 对象。自从升级到 Windows 7 后,我就没有使用过该工具,现在活动 X 对象无法加载,并出现 429“ActiveX 组件无法创建对象”错误。我不了解 VB6,但我已经注册了 activex dll 和类型库,我可以通过 project->references 窗口从项目中删除和添加对象(当引用按预期删除时程序无法编译)。 VB6 ide 在管理员模式下运行,如果我直接以管理员身份运行 exe,我会得到同样的错误。
有没有其他人遇到过类似的问题并找到解决方法?
谢谢,
帕特里克
PS : 我也试过把有问题的 dll 放在 exe 的工作目录中
编辑:我没有运气试图解决这个问题,最终远程进入 Windows 2003 服务器以测试更改。
【问题讨论】:
标签:
vb6
windows-7
activex
【解决方案1】:
您可以尝试使用 Mark Russinovich 的 regMon 和 FileMon 来准确查看在加载该 dll 期间请求了哪些文件或 regkey。这通常可以告诉您是否缺少依赖项。
VS6 附带的 DEPENDS.EXE 有时也有好处(尽管它不一定获得 dll 或 exe 的所有依赖项)。
【解决方案2】:
COM 将使用注册表将类名映射到必须加载的物理 DLL 文件。
检查与您的 COM 对象有关的注册表项...首先在 HKEY_CLASSES_ROOT 下,然后是类名,它会为您获取 CLSID,然后是对象 GUID 的 HKEY_CLASSES_ROOT/CLSID 部分,然后查看物理库的位置生活。
【解决方案3】:
429 可能意味着各种不同的东西。很多时候,这意味着缺少一个依赖项,而找出缺少什么依赖项的最简单方法是使用 procmon 查看应用程序试图访问的文件/注册表设置,并希望找到您获得 ACCESS_DENIED 或 FILE_NOT_FOUND 或你有什么。
【解决方案4】:
问题也可能与您的浏览器有关。几周前我升级了我的 IE,从那以后我不得不通过打开 IE、单击工具、单击自定义、滚动到 activeX 控件并启用和/或单击提示来进行更改。脚本和我使用 XMLHttprequest 也需要相同的内容。现在一切都恢复正常了,但是 ActiveX 警告警报有时需要超过 2 分钟才能弹出,然后单击时一切正常。
【解决方案5】:
你在那台机器上启用了 UAC 吗?你试过disabling it吗?我见过一些情况,它允许注册 ActiveX 控件但不允许使用它们的应用程序运行。