Search code examples
vb.netcomvb6

Using CreateObject ActiveX component can't create object w/ Registered Class Library


I have written some classes in visual basic.net and want to use them in a visual basic 6 application.

Now I have registered the tlb/dll files on my computer and I am able to create an instance of the class in vb6 with

Dim c As New Advantage_Dealer_Email_CoreClassLibrary.CoreClass

However I want to use CreateObject(Class) but when I try I get the ActiveX error, here is the code I am using for that

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

Is this possible what am I doing wrong?

Thanks

Update: After searching through the registry I am only able to find a CLSID which references Advantage.Dealer.Email.CoreClassLibrary.

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

Solution

I had another look in the registry and found a Guid called

CoreClassInterface

which referenced the library, when I used the code

CreateObject("CoreClassInterface")

the vb6 program worked.

For anyone that comes across this post in the future it was because I had set the ProgID in the vb.net class when setting up the class with an interface for the Com Interop.

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

After removing the ProgID for the class and rebuilding/registering the library on my computer I found

Advantage.Dealer.Email.CoreClassLibrary.CoreClass

In the Registry, and my vb6 app worked.

Thanks for your help tcarvin


Solution

  • I find it best, when creating .NET libraries for consumption by VB6, to keep the namespace of COM-visible classes to only one-layer deep to avoid the underscores. Anyway, have you attempted to use:

    CreateObject("Advantage_Dealer_Email_CoreClassLibrary.CoreClass")
    

    When all else fails, the answer is in your registry. Use regedit and see what the component is listed under.