我创建了类库项目,其中包含了下面的代码和设置:
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")发布于 2016-04-26 11:11:40
您可能使用regasm.exe将类添加到注册表中,但在注册表中的位置呢?
问题是我们有处理32位和64位架构的复杂性,所以想到了几件事。
你是如何运行脚本的
Dim result
Dim myObj
Set myObj = CreateObject("MyDll.TestClass")
Set result= myObj.SomeFunc("a")如果您使用默认的wscript.exe Windows脚本主机运行脚本,那么它将默认为OS体系结构,而在大多数现代安装中,该架构将是64位OS。
如果regasm.exe没有在64位注册表中注册类,那么CreateObject将永远找不到prog id MyDll.TestClass。
检查一下this article,看看是否可以在注册表中看到这个类,它详细说明了检查32位和64位的各个位置。
有用的链接
https://stackoverflow.com/questions/36862784
复制相似问题