使用CreateObject ActiveX组件无法创建具有已注册类库的对象

时间:2014-07-16 14:49:25

标签: vb.net com vb6

我已经在visual basic.net中编写了一些类,并希望在visual basic 6应用程序中使用它们。

现在我已经在我的计算机上注册了tlb / dll文件,我可以在vb6中用

创建该类的实例
Dim c As New Advantage_Dealer_Email_CoreClassLibrary.CoreClass

但是我想使用CreateObject(Class),但是当我尝试收到ActiveX错误时,这里是我正在使用的代码

Dim c As Object
Set c = CreateObject("Advantage.Dealer.Email.CoreClassLibrary.CoreClass")

这可能是我做错了吗?

由于

更新: 在搜索注册表后,我只能找到一个引用Advantage.Dealer.Email.CoreClassLibrary的CLSID。

{CFB8F7A1-BC6F-4771-839F-1343785ED9D6} > 1.0 > (Default) REG_SZ Advantage.Dealer.Email.CoreClassLibrary

解决方案

我在注册表中再看了一眼,发现了一个名为

的Guid
CoreClassInterface
当我使用代码时

引用了库

CreateObject("CoreClassInterface")

vb6计划有效。

对于今后遇到这篇文章的人来说,这是因为我在设置带有Com Interop接口的类时已经在vb.net类中设置了ProgID。

<Guid("7EB55A33-34E7-4FC4-A87B-41635EEAF32D"), ClassInterface(ClassInterfaceType.None), ProgId("CommClassInterface")> Public Class CoreClass : Implements _CoreClassInterface

删除该类的ProgID并在我的计算机上重建/注册该库后,我找到了

Advantage.Dealer.Email.CoreClassLibrary.CoreClass

在注册表中,我的vb6应用程序正常运行。

感谢您的帮助 tcarvin

1 个答案:

答案 0 :(得分:0)

在创建供VB6使用的.NET库时,我发现最好将COM可见类的名称空间保持在一层深,以避免下划线。无论如何,您是否尝试过使用:

CreateObject("Advantage_Dealer_Email_CoreClassLibrary.CoreClass")

当其他所有方法都失败时,答案就在您的注册表中。使用regedit并查看下面列出的组件。