0x800a01ad - Microsoft VBScript运行时错误:ActiveX组件无法创建对象。

3

我创建了一个类库项目,其中包含以下代码和设置:

using System.Runtime.InteropServices;

namespace MyDll
{
    [ComVisible(true)]
    public class TestClass
    {
        [ComVisible(true)]
        public string[] SomeFunc(string path)
        {
            return new[] {"1","7","9"};
        }
    }
}

同样在“属性/应用程序/程序集信息”中检查“使程序集COM可见”,并在“属性/生成”中检查“注册COM互操作性”。

在我的VB脚本中,我遇到了异常:

"0x800a01ad - Microsoft VBScript运行时错误: ActiveX组件无法创建对象:'MyDll.TestClass'"

当尝试从dll创建对象时。

Dim result
Dim myObj
Set myObj = CreateObject("MyDll.TestClass")
Set result= myObj.SomeFunc("a")

1
你是否使用regsvr32.exe注册了实际的DLL(该建议适用于服务器端和客户端的VBScript)? - user692942
在属性/生成中注册COM互操作意味着通过regasm.exe注册dll。 - Ted
对于COM,我们需要使用regasm.exe。http://www.codeproject.com/Articles/79314/How-to-call-a-NET-DLL-from-a-VBScript - Ted
但是它被注册到哪个注册表中呢?如果regasm.exe正在执行regsvr32.exe的工作,甚至自己调用它,那么哪一个正在被调用呢?*(请参阅该链接以了解32位和64位注册表位置的详细信息,以及使用错误的regsvr32.exe可能会影响它最终所在的位置)*。 - user692942
1个回答

1
您可能正在使用regasm.exe将类添加到注册表中,但是注册表的哪个位置?
问题在于我们需要处理32位和64位架构的复杂性,因此会想到几件事情。
您如何运行脚本?
Dim result
Dim myObj
Set myObj = CreateObject("MyDll.TestClass")
Set result= myObj.SomeFunc("a")

如果您使用默认的wscript.exe Windows脚本宿主来运行脚本,则它将默认为操作系统架构,大多数现代安装将是64位操作系统。
如果regasm.exe未向64位注册表注册类,则CreateObject永远无法找到程序IDMyDll.TestClass
查看this article并查看注册表中是否可以看到该类,它详细说明了要检查32位和64位的各个位置。

有用的链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接