VB6 IDE에서 무엇을 토대로 인텔리센스 정보를 제공하는지 직접 확인해보거나 경험해본적은 없습니다만, 제 예상으로 타입 라이브러리 정보를 DLL에 리소스로 포함시키거나, TLB 파일을 따로 제공해주어야 인터페이스의 멤버가 무엇이 있는지를 판정할 수 있는 근거가 생길 것 같습니다.
별도의 CI/CD 파이프라인을 사용한다면, tlbexp.exe라는 .NET Framework SDK 상의 도구를 이용하거나, 아래 페이지를 참조하여 VB6 IDE가 사용할 TLB 파일을 자동 생성하도록 프로젝트 속성을 변경하는 방법을 쓸 수 있을 겁니다.
다만 이 방법은 .NET Framework 기준이고, .NET 5 이후에서는 생성 방법도 달라지고, 내부 런타임 메커니즘도 아주 다르기 때문에 .NET Core 계열로 나중에 옮겨간다면 미리 방법을 따로 찾아보셔야 합니다.
아래 코드에서 인터페이스에는
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
이걸 선언해주고, 상속 받은 클래스에는
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ISumTest))]
이 2개를 선언해주니 vb6.0 에서 c# 으로 만든 dll 참조했을 때 인텔리센스가 적용되네요!
namespace SumXY
{
[Guid("24EE3F73-597C-4ADE-93C3-73EACAC116F4")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ISumTest
{
void Sum(int x, int y, ref int z);
}
[Guid("7CFD3F5A-EEF5-42D7-BE9D-B5864F1505CA")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ISumTest))]
public class SumTest : ISumTest
{
public void Sum(int x, int y, ref int z)
{
z = x + y;
}
}
}