We have many old COM classes that are still in use. They were written in
VB6. We are now starting to do some things in C# however we cannot just
throw away everything from COM and start over. Our migration to C# will be
multi-phase and right now we just need proof of concept. Here's our
situation:
1. We need to create a DLL/TLB in C# that works in VB6
2. C# class needs to implement a VB6 class interface
3. C# class needs to be exported to COM TLB for use in VB6
Here is my basic code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace UserBV
{
[ComVisible(true)]
public class UserBVInput: AlfaBVIO.BVInput
{
[ComVisible(true)]
void AlfaBVIO._BVInput.Initialize(ref DSDataObjects.DSDataType
iSettings)
{
}
[ComVisible(true)]
void AlfaBVIO._BVInput.GetScenarios(string iFileName, ref
System.Array oScenarios)
{
}
public BVInput()
{
}
~BVInput()
{
}
}
[ComVisible(true)]
public class BVOutput : AlfaBVIO.BVOutput
{
public BVOutput()
{
}
~BVOutput()
{
}
[ComVisible(true)]
void AlfaBVIO._BVOutput.Initialize(ref DSDataObjects.DSDataType
iSettings)
{
}
[ComVisible(true)]
void AlfaBVIO._BVOutput.Add(ref DSDataObjects.DSDataType
iFileHeader, ref DSDataObjects.DSDataType iBVSeries)
{
}
[ComVisible(true)]
void AlfaBVIO._BVOutput.Save()
{
}
}
}
I have the project file set according to "Register for COM interop" as well
as "Make assembly COM visible". I am able to reference the built TLB file in
a VB6 project but there are no public methods. The VB6 interface that I must
implement from is called AlfaBVIO.BVInput
Can someone please help me? I'm sure to anyone that has experienced this
before it is a no-brainer. This is just the first time I've ever had to do
something as odd as this.