【发布时间】:2014-07-24 06:34:16
【问题描述】:
我在 Visual Studio Express 2010,vb.net 中创建了一个类库项目。
我检查了项目/应用程序/程序集信息/使程序集 COM 可见。
我建立了这个项目。
我将 myproject.dll 和 myproject.tlb 复制到 C:\WINNT\system32
我运行了 C:\WINNT\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe myproject.dll /codebase。 (我得到“警告 RA0000”,然后是“类型注册成功”。)
我查看 regedit,并在 HKEY_Classes_Root/CLSID 和 /classname 和 /TypeLib 中找到我的类的键。
在 VBA 编辑器的 Excel 中,我转到工具/参考,然后在 system32 文件夹中添加对 tlb 文件的参考。 (该引用不会出现在项目管理器的 References 文件夹中。)
在 VBA 中,我写:
Dim y as string
Dim x as myproject.myobject
set x = New myproject.myobject
y = x.testfunction(Input:="Hi")
Intellisense 识别 myproject,并且在键入我的项目后它还会提示我所有的类名。并且在方法调用时,方法名和参数名都自动大写。
当我单步执行代码时,在
set x = New myproject.myobject
我收到错误:运行时错误'-2146233065 (80131517)':自动化错误
如果我将 x 声明为 Variant,我可以使用我的一些类来实例化和访问成员。与其他人我得到同样的错误。
我还尝试在 Excel 应用程序文件夹中使用 Excel.exe.config 文件和 .net 版本进行破解。
有人可以帮忙吗?对不起,这是我第一次编译插件,我认为它一定很简单。但在我看来,这个过程并没有太多的指导或明确性。
谢谢。
【问题讨论】:
-
另外,我在 VSE 中没有“注册 COM 互操作”设置。所以我按照提示查看 .vbproj 文件,并在任何“
”行之后添加“ true ”行。我忘记了建议的行是否已经存在,或者我添加了它们——但它们现在存在。 -
看来我的问题可能与构造函数有关。在我的三个类中,有两个我没有编写构造函数。对于第三个,我编写了一个构造函数,它对过程范围内的变量和类范围的私有变量都做了很多事情。我在前两个中添加了空的公共构造函数,现在似乎可以工作(至少就实例化而言)。现在我将尝试减少或清空第三个构造函数。 (我认为我在 Variant 类型方面的第一次部分成功可能是因为我在此之前制作了那些构造函数。)
-
VBA 不支持带参数的构造函数,所以你肯定需要它们的默认构造函数。
标签: .net vb.net vba com instantiation