【问题标题】:VB6 COM Object - only works when IDE is running?VB6 COM 对象 - 仅在 IDE 运行时有效?
【发布时间】:2011-06-12 16:01:33
【问题描述】:

我在 VB6 中有一个古老的 COM 对象,直到最近它一直运行良好。 (不都是)。所做的唯一代码更改(由 svn 验证)是在数组中包含一个新的字符串文字。

VB6 IDE 可以很好地编译对象。当我点击 Run|Start... 并从命令提示符执行以下测试 vb 脚本时,该对象工作正常,我看到了我期望的对话框:

dim o

set o = CreateObject("MyDll.MyClassName")

wscript.Echo "Testing object" 
wscript.Echo o.HelloWorld     ' runs a test method that returns "Hello World"
wscript.Echo "Done"

但是,当我在 IDE 中停止调试并尝试从同一命令提示符运行相同的 vbscript 时,我收到错误:

(出于安全原因删除了ProgID,但它与脚本中的相同。)

我尝试过的事情:

  1. 我在启动和停止调试器的时候怀疑DLL可能已经被VB注册和注销了,所以在运行测试脚本之前我也尝试用regsvr32注册对象。这没有任何效果。

  2. 我还从注册表中删除了对 DLL 的所有引用,并重新注册了该对象。同样的错误。

  3. 我删除了 DLL 并从 VB(文件|制作...)重新构建它并重新注册了 DLL。同样的错误。

机器是 Win7 Ultimate x64,用 VB6 构建的对象。

有什么建议吗?

而且,不,不幸的是,用 C# 重写对象不是一种选择。

【问题讨论】:

  • 启动调试器时到底运行了什么?这实际上是一个EXE项目吗?那么行为就正常了。
  • 该项目是 ActiveX DLL,而不是 EXE。当我单击“运行”时,我不确定 IDE 在做什么。

标签: dll com vbscript activex


【解决方案1】:

微软说这是某种依赖问题:http://support.microsoft.com/kb/194801

因为当您在 IDE 中运行对象时它正在工作,所以您有四种可能性:

  1. ActiveX dll 本身不在系统路径上。
  2. ActiveX dll 依赖于不在系统路径上的其他内容。
  3. 注册 dll 后,它以某种方式被标记为需要提高安全性才能运行
  4. 注册 dll 后,它所依赖的东西需要提高安全性才能运行。

我会尝试以管理员身份打开命令提示符,然后运行启动对象的 vbscript 文件。如果可行,则意味着问题出在#3 或#4。如果不是,则表示 #1 或 #2。

如果 ActiveX dll 没有外部依赖项,则可以消除 #2 和 #4。

接下来,我会查看我的事件日志,看看 Windows 是否记录了有关此问题的任何其他错误。

更新

刚刚找到另一个可能的原因。如果 ActiveX dll 是 32 位的,那么脚本必须使用 32 位版本的脚本引擎才能运行;否则它会给出这个错误,因为默认脚本引擎(该机器上的 x64)实际上找不到 dll。

我相信如果你使用 \windows\system32\cscript.exe 来运行你的 vbscript 那么你会很好。

【讨论】:

  • 感谢您的回答。我在 32 位模式下运行它,我想知道如果它在 IDE 中工作,缺少依赖项可能是个问题。 DLL 的权限可能是个问题,但我正在更改文件权限以给予所有人完全控制权,并且它安装在 c:\windows\system32 中,它应该在路径中。啊。
【解决方案2】:

嗯,这听起来肯定是 32 位 dll 的问题。上面提到的建议是正确的,但路径是错误的。尝试使用 C:\Windows\SysWOW64 中的 CSCRIPT ..

【讨论】:

    【解决方案3】:

    尝试使用来自%Windows%\SysWOW64regsvr32.exe 注册 DLL。它不同于%Windows%\System32 中的regsvr32.exe(在64 位操作系统上)。

    看到这个SO posting

    【讨论】:

    • 不幸的是,自 2011 年以来我已经改变了项目(和工作)。:) 不过谢谢。
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2017-11-03
    • 2011-02-17
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    相关资源
    最近更新 更多