2014-07-16 77 views
0

我在visual basic.net中编写了一些类,并希望在Visual Basic 6应用程序中使用它们。使用CreateObject ActiveX组件不能创建对象w /已注册类库

现在我已经注册了我的计算机上的TLB/dll文件,我能够与在VB6中创建一个类的实例

Dim c As New Advantage_Dealer_Email_CoreClassLibrary.CoreClass 

不过,我想使用CreateObject(类),但是当我尝试我得到的ActiveX错误,这里是我使用该

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

代码这是可能的我究竟做错了什么?

感谢

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

{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

+0

可能重复的[import vb.net class library to vb6 project](http://stackoverflow.com/questions/8562819/import-vb-net-class-library-to-vb6-project) – Plutonix

+0

不是真的,即使在调光时,该帖子的OP也得到了完全不同的错误。当我尝试使用'CreateObject'执行相同操作时,我可以成功创建它的类的昏暗。 – richardmountain

+0

您应该在HKCR \ CLSID下找到GUID,并且在该GUID下您应该看到InprocServer,ProgId等的其他键。同样,你的ProgId(由CreateObject使用)应该在HKCR中并且应该指向GUID。 – tcarvin

回答

0

我最好找到它,当创建.NET库由VB6消费,COM可见的类的命名空间保持到只有一层深,以避免下划线。无论如何,你有没有试图使用:

CreateObject("Advantage_Dealer_Email_CoreClassLibrary.CoreClass") 

当所有其他都失败时,答案是在您的注册表中。使用注册表编辑器并查看下面列出的组件。

+0

我尝试过使用CreateObject(“Advantage_Dealer_Email_CoreClassLibrary.CoreClass”),结果相同 另外我不完全确定我在注册表中寻找什么,你有没有例子? – richardmountain

+0

在HKEY_CLASSES_ROOT中搜索CoreClass。您通常会以ProjectName.ClassName或PackageName.Classname格式查看它。当你使用'CreateObject'时,它正在注册表中进行查找。如果您找到它,请将您的问题的详细信息发布并编辑,以便我们可以查看。 – tcarvin

+0

你在你的com-visible类中为你的ClassInterface属性使用了什么? – tcarvin

相关问题