VB6 调用 C#.Net 的 DLL 提示 ActiveX component can't create object, 请帮忙看下如何解决

时间:2021-11-23 01:57:12
Hi,

我用 C#.Net 已经生成一个 DLL 给 VB6 使用,我已经用 C#.Net 生成出来的 .tlb 文件放到 VB6 工程中引用,而 VB6 也可引用成功,并成功在代码中使用到这个 DLL 里面的类与方法。

但是,当运行的时候,提示出错: ActiveX component can't create object。
这个错误是在 VB6 程序运行到:

Dim MyTestClass As MyDLL.TestClass
Set MyTestClass = New MyDLL.TestClass (运行到这一行时出错: ActiveX component can't create object)

我参考了以下的方法,用了 RegAsm 是可以生成出 MyDLL 对应的 MyDLL.tlb ,但是,再次运行同样也是同一个错误,请问是如何解决??

因为 MyDLL.dll 还引用了几个第三方的 .Net DLL ,不用把所有 DLL 都要通过 RegAsm 注册吧???

http://support.microsoft.com/kb/817248/zh-cn


注册 .NET 程序集
您必须先注册 .NET 程序集,然后 COM 客户端才能使用它。您可以使用 Tlbexp.exe 和程序集注册工具 (RegAsm.exe) 来注册 .NET 程序集。您可以通过使用 Tlbexp.exe 来创建能够被 COM 理解的 .tlb 文件。为此,请在命令提示符下键入下面的命令:

 TlbExp AssemblyName /out:FileName

当 COM 客户端要与托管程序集对话时,这些客户端就会引用此 .tlb 文件。Tlbexp.exe 命令行工具可将程序集内包含的类和接口转换为 COM 类型库。当类的类型信息可用时,COM 客户端可创建 .NET 类的实例,并且这些客户端可以调用该实例的方法。

您必须使用 Regasm.exe 工具来注册 .NET 程序集。当您应用 /tlb: 选项时,Regasm.exe 可以生成并注册一个类型库。COM 客户端要求将类型库安装在 Windows 注册表中。如果不应用此选项,则 Regasm.exe 仅注册程序集中的类型,而不注册类型库。注册程序集内的类型和注册类型库是两种不同的活动。若要注册 .NET 程序集,请在命令提示符下键入下面的命令:

RegAsm AssemblyName /tlb: FileName.tlb


请帮下忙,谢谢。

3 个解决方案

#1


我用了 32 位的 RegASM 重新注册一下 MyDLL.dll 后,没注册其他第三方 dll,

然后再运行 VB6 应用程序,这一次是提示:

Automation error
The system cannot find the file specified.

Run-time error '-2147024894 (80070002)'

同样也是到了 New 的时候出错:

Dim MyTestClass As MyDLL.TestClass
Set MyTestClass = New MyDLL.TestClass (运行到这一行时出错: )

请帮忙指点一下。

#2


所有的.net库,如果对外发布了类型,都需要用regasm注册。并且,目标电脑必须安装.net framework。

#3


引用 2 楼 caozhy 的回复:
所有的.net库,如果对外发布了类型,都需要用regasm注册。并且,目标电脑必须安装.net framework。


谢谢,已经解决,一个是要用 regasm 注册,另一个是 new 方法里面有些问题,现在解决了,谢谢。

#1


我用了 32 位的 RegASM 重新注册一下 MyDLL.dll 后,没注册其他第三方 dll,

然后再运行 VB6 应用程序,这一次是提示:

Automation error
The system cannot find the file specified.

Run-time error '-2147024894 (80070002)'

同样也是到了 New 的时候出错:

Dim MyTestClass As MyDLL.TestClass
Set MyTestClass = New MyDLL.TestClass (运行到这一行时出错: )

请帮忙指点一下。

#2


所有的.net库,如果对外发布了类型,都需要用regasm注册。并且,目标电脑必须安装.net framework。

#3


引用 2 楼 caozhy 的回复:
所有的.net库,如果对外发布了类型,都需要用regasm注册。并且,目标电脑必须安装.net framework。


谢谢,已经解决,一个是要用 regasm 注册,另一个是 new 方法里面有些问题,现在解决了,谢谢。