我使用下一代码和设置创建了类库项目:
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互操作'
在我的VBscript中我得到了异常
“0x800a01ad - Microsoft VBScript运行时错误:ActiveX组件 无法创建对象:'MyDll.TestClass'“
尝试从dll创建对象时:
Dim result
Dim myObj
Set myObj = CreateObject("MyDll.TestClass")
Set result= myObj.SomeFunc("a")
答案 0 :(得分:1)
您可能正在使用regasm.exe
将类添加到注册表中但在注册表中的位置?
问题是我们有处理32位和64位架构的复杂性,所以我想起了几件事。
你是如何运行脚本的?
Dim result
Dim myObj
Set myObj = CreateObject("MyDll.TestClass")
Set result= myObj.SomeFunc("a")
如果您使用默认的wscript.exe
Windows Scripting Host来运行脚本,那么它将默认为OS体系结构,在大多数现代安装中它将是64位操作系统。
如果regasm.exe
未使用64位注册表注册该类,则CreateObject
将永远不会找到编号MyDll.TestClass
。
检查this article并查看是否可以在注册表中看到Class,它详细说明了检查32位和64位的各种位置。