【问题标题】: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 的所有依赖项)。

【讨论】:

  • RegMon / FileMon 参考为我节省了一天!这两个应用程序现在都滚入了 ProcessMonitor:[technet.microsoft.com/en-us/sysinternals/bb896645.aspx][1] 通过搜索 ProcessMonitor 向我显示的注册表设置,我能够看到导致“找不到对象库”错误的原因。我能够将日志文件保存在 .csv 中,在记事本中打开并搜索。感谢您的提示!
【解决方案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 控件但不允许使用它们的应用程序运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-12
          • 1970-01-01
          • 2010-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          相关资源
          最近更新 更多