【问题标题】:ActiveX component can't create object? .NET COMActiveX 组件不能创建对象? .NET COM
【发布时间】:2015-06-20 12:53:05
【问题描述】:

我目前正在尝试在我的 Visual Basic 6 应用程序中引用一个 .NET COM 库。我已经使用 Regasm 注册了它,并且在我的班级中将 ComVisible 设置为 true。但是,当我尝试运行我的应用程序时,出现以下错误:

ActiveX 组件无法创建对象。

我的库包含一个非常简单的函数(因为我只是想测试是否可以运行它),它只返回字符串“Hello World”。

我必须使用另一台机器(机器 1)来创建我的 C# .Net 类,然后将该类复制到另一台机器(机器 2)上,然后从那里注册 dll 并在我的项目中引用它。然后我在另一台机器(机器 3)上测试了我的项目,这就是我收到错误的原因。

我真的需要帮助,我已经尝试取消注册并重新注册,但仍然无济于事。

【问题讨论】:

  • 是的,你做错了什么。我们看不到你做错了。
  • @HansPassant 我在机器 1 上创建了一个 C# 库,然后将其复制到机器 2,在机器 2 上我注册了 dll,它创建了一个 .tlb 文件。然后我在我的 vb6 应用程序中引用了那个 .tlb 文件。但是,当我在机器 3(目标机器)上测试我的项目时,我收到了上述错误。
  • @HansPassant,.tlb 文件是否必须位于 C:\Windows\system32 文件夹中?

标签: c# .net com vb6 interop


【解决方案1】:

试试这个。

从提升的命令提示符:

  1. RegAsm /codebase /tlb AssemblyName.dll。记下生成的 .tlb 文件。
  2. RegTlib File.tlb
  3. 打开您的 VB6 项目并引用 .tlb 文件。

【讨论】:

  • 有没有办法查看dll是否实际注册,除了命令提示符说它注册成功。我的代码现在的问题是它正在为 dll / .tlb 查找错误的文件
  • 命令提示符是判断是否注册的最好方法。要查看它正在使用哪个 .dll,请打开 regedit 并搜索 COM 组件的 ProgID (ComponentName.Classname)。这将为您提供 CLSID。然后在 CLSID 中搜索 InProcServer32 子项 - 这将告诉您在尝试加载 .DLL 并返回 COM 接口指针时它将访问哪个文件。如有必要,您可以删除这些密钥并重新注册组件。
  • 对于COM组件(ComponentName.ClassName),ComponentName是指命名空间吗?
  • 值得注意的是,RegTlib 现在在 Windows 2012 上不存在!
猜你喜欢
  • 2017-09-02
  • 2011-08-18
  • 2010-09-16
  • 2010-11-06
  • 2010-12-25
  • 2011-01-04
  • 2011-03-05
相关资源
最近更新 更多