2011-12-19 86 views
2

我创建了vb.net类库。它是存储设备的接口。它提供了一些对象和方法来读取和写入数据到设备。将vb.net类库导入到vb6项目

问题是客户有一个vb6应用程序,我们想添加类库的功能来操纵设备。我已经将类更改为com类,选中了com interopt复选框并使用.net framework 2.0 regasm.exe注册了该库。

我添加了库作为对空白vb6项目的引用并创建了一个对象。

dim t as comlib.obj 

对象等于 '无'

时,我说:

t = new comlib.obj 

t = createobject("comlib.obj") 

我得到了以下错误:

run-time error '2147024894 (80070002)': Automation

我做错了什么?

+0

请阅读下一次如何格式化帖子和应用它的帮助。绝对不需要使用'
'标签。 – 2011-12-19 14:36:06

+0

这是一个常见的Windows错误,“文件未找到”。由于您在使用Regasm.exe时忘记使用/ codebase选项而产生的可能性很高。如果您不知道可能会丢失什么文件,则可以使用SysInternals的Procmon实用程序。 – 2011-12-19 15:53:16

+0

另一种可能性是,COM包装可能没有用x86或x64构建或注册。过去,我已经遇到了一个古老的传统ASP应用程序的问题。它以x86模式运行,这需要我使用x86构建包装器,并使用x86版本的regasm.exe进行注册。从那以后,我习惯于为x86和x64提供安装程序/构建,并且消费者可以选择哪个更合适。 – killthrush 2013-07-08 20:39:35

回答

1

只调暗一个变量不会为其赋值(与.NET private TypeName variableName;相同),您需要先使用Set T = New Comlib.Obj创建它。

如果你从这里得到一个错误,你需要使用标准的调试技术来缩小它,或者发布你的完整的错误信息,并有人可以建议。

0

我要说的是@Deanna有解决方案,但如果失败则

我建议你需要看看你的构造函数在.NET程序集,并确保这是不抛出任何类型的运行时错误的。

即使您的New Sub中有一个错误处理程序,它也不会引发到VB6应用程序。

我遵循一个约定,以保持我的.NET构造函数为最小值,然后使用额外的方法执行构造代码(例如LoadData)。这样你可以有一个合适的错误处理程序。如果错误被抛出 - 它被正确地提升到VB6。