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
请帮下忙,谢谢。

解决方案 »

  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.   


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