Dll VB6 COM对象-仅在IDE运行时工作?

Dll VB6 COM对象-仅在IDE运行时工作?,dll,com,vbscript,activex,Dll,Com,Vbscript,Activex,我在VB6中有一个古老的COM对象,它一直工作良好,直到最近。(他们不都是。)。唯一的代码更改(由svn验证)是在数组中包含一个新的字符串文字 VB6 IDE可以很好地编译对象。当我开始跑步时。。。并从命令提示符下执行以下测试vb脚本,对象工作正常,我看到了预期的对话框: dim o set o = CreateObject("MyDll.MyClassName") wscript.Echo "Testing object" wscript.Echo o.HelloWorld '

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

VB6 IDE可以很好地编译对象。当我开始跑步时。。。并从命令提示符下执行以下测试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,但与脚本中的相同。)

我尝试过的事情:

  • 我怀疑在启动和停止调试器时,VB可能已经注册和注销了DLL,因此在运行测试脚本之前,我还尝试使用
    regsvr32
    注册对象。这没有任何效果

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

  • 我删除了DLL并从VB(文件| Make…)重新构建它,然后重新注册了DLL。同样的错误

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

    有什么建议吗


    而且,不幸的是,用C#重写对象不是一个选项

    微软称这是某种依赖性问题:

    因为它在IDE中运行对象时起作用,所以有四种可能:

  • ActiveX dll本身不在系统路径上
  • ActiveX dll依赖于不在系统路径上的其他内容
  • 注册dll后,它会以某种方式标记为需要提高安全性才能运行
  • 注册dll后,它所依赖的东西需要提高安全性才能运行
  • 我将尝试以管理员身份打开命令提示符,然后运行启动对象的vbscript文件。如果这样做有效,那么就意味着问题不是3就是4。如果没有,则表示1或2

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

    接下来,我会查看我的事件日志,看看windows是否记录了关于此的任何其他错误

    更新

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


    我相信如果您使用\windows\system32\cscript.exe来运行vbscript,那么您会做得很好。

    好吧,这听起来肯定像是32位dll的问题。。上述建议是正确的,但路径是错误的。。尝试使用C:\Windows\SysWOW64..

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


    请参见此图。

    启动调试器时具体运行什么?这实际上是一个EXE项目吗?该项目是一个ActiveX DLL,而不是一个EXE。当我点击“运行”时,我不确定IDE在做什么。谢谢你的回答。我在32位模式下运行它,我想知道如果它在IDE中工作,缺少依赖项怎么会成为一个问题。对DLL的权限可能会有问题,但我正在更改文件权限以使每个人都能完全控制,它安装在c:\windows\system32中,应该在路径中。啊。不幸的是,自2011年以来,我改变了项目(和工作)不过谢谢你。