c# 으로 만든 dll 파일을 vb 6.0 에서 참조해서 쓰는 방법 질문이요

c# 에서 dll 파일을 아래와 같이 만들었습니다.

질문1
질문2
질문3

x와 y 값을 더하는 Sum 이라는 메소드를 만들고, 프로젝트 속성에 어셈블리 정보에서 “어셈블리를 COM에 노출” 을 체크 했고, 프로젝트 속성에 빌드에서 “COM Interop 등록” 을 체크 후에 빌드해서 DLL 파일과 TLB 파일을 생성 했습니다.

질문4

그리고나서 CMD(관리자모드 실행) 에서 위와 같이 DLL 과 TLB 파일을 레지스트리에 등록 했습니다.

질문5

그리고 위 사진에서 처럼 VB 6.0 에서 참조를 하고 코드를 작성 한 후 컴파일을 하면 “클래스를 찾을 수 없다” 는 메시지가 나오면서 컴파일이 되지가 않네요…

c# 으로 만든 DLL 파일을 vb 6.0 에서 참조해서 쓰려면 어떻게 해야할까요?

3개의 좋아요

C# COM 만들기 글을 참고하세요.

2개의 좋아요

일단 vb 6.0은 32비트 런타임이고, 닷넷에서 dll을 만들어 빌드할때는 64비트라서 서로 연결이 안될수 있습니다. 닷넷에서 빌드 타겟을 32비트로 명시적으로 빌드한 후에 COM 서버 등록을 하셔야 할겁니다.

3개의 좋아요

링크 확인해서 해보겠습니다. 감사합니다!

3개의 좋아요

답변 감사합니다! 알려주신대로 32비트로 빌드해서 해보겠습니다

3개의 좋아요

알려주신대로 32비트로 빌드하고 나니 vb6.0 에서 적용이 잘 되는데요!!

그런데 인텔리센스가 적용이 안되던데 이 부분은 혹시 왜 그런걸까요?

Sum1 에서 . 을 누르면 해당 클래스의 메소드인 Sum() 이 나와야하는데,. 인텔리센스가 안되네요

3개의 좋아요

알려주신 링크 글 따라하니 잘 되네요! 감사합니다!! 32비트 빌드가 중요했었네요…!

3개의 좋아요

VB6 IDE에서 무엇을 토대로 인텔리센스 정보를 제공하는지 직접 확인해보거나 경험해본적은 없습니다만, 제 예상으로 타입 라이브러리 정보를 DLL에 리소스로 포함시키거나, TLB 파일을 따로 제공해주어야 인터페이스의 멤버가 무엇이 있는지를 판정할 수 있는 근거가 생길 것 같습니다.

별도의 CI/CD 파이프라인을 사용한다면, tlbexp.exe라는 .NET Framework SDK 상의 도구를 이용하거나, 아래 페이지를 참조하여 VB6 IDE가 사용할 TLB 파일을 자동 생성하도록 프로젝트 속성을 변경하는 방법을 쓸 수 있을 겁니다.

다만 이 방법은 .NET Framework 기준이고, .NET 5 이후에서는 생성 방법도 달라지고, 내부 런타임 메커니즘도 아주 다르기 때문에 .NET Core 계열로 나중에 옮겨간다면 미리 방법을 따로 찾아보셔야 합니다.

3개의 좋아요

답변 감사합니다!! 검색을 통해서 해결 방법을 찾아냈습니다.

아래 코드에서 인터페이스에는
[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;
        }
    }
}
2개의 좋아요

@힘내쿠우 쿠우님!! 멋진 활동에 Markdown 활용법 까지지 익혀 보시면 너무 좋을 것 같습니다.

Markdown 기본 사용법 및 활용: 트렌디… : 네이버블로그 (naver.com)

소스코드와 설명 등을 더 가 독성 있게 작성하실 수 있습니다.

한번 읽어 보시겠어요?

그리고 지금까지 작성하셨던 글 내용도 한번 연습삼아 고쳐봐 주시면
앞으로 다른분들에게도 큰 도움 될 것 같습니다!!

1개의 좋아요

앗! 이런게 있었네요. 수정해놨습니다! 감사합니다

2개의 좋아요