다음을 통해 공유


COM 클래스 예제

다음 코드는 COM 개체로 노출할 클래스의 예입니다. 이 코드를 프로젝트에 추가된 .cs 파일에 배치한 후 COM Interop 등록 속성을 True로 설정합니다. 자세한 내용은 방법: 구성 요소 COM Interop 등록을 참조하세요.

C# 개체를 COM에 노출하려면 클래스 인터페이스(필요한 경우 "이벤트 인터페이스") 및 클래스 자체를 선언해야 합니다. 클래스 멤버가 COM에 표시되려면 다음 규칙을 따라야 합니다.

  • 클래스는 public이어야 합니다.
  • 속성, 메서드 및 이벤트는 public이어야 합니다.
  • 속성 및 메서드는 클래스 인터페이스에서 선언되어야 합니다.
  • 이벤트는 이벤트 인터페이스에서 선언되어야 합니다.

이러한 인터페이스에서 선언하지 않는 클래스의 다른 공용 멤버는 COM에 표시되지 않지만 다른 .NET 개체에 표시됩니다. 속성 및 메서드를 COM에 노출하려면 클래스 인터페이스에서 선언하고 DispId 특성을 사용하여 표시한 후 클래스에서 구현해야 합니다. 인터페이스에서 멤버를 선언하는 순서는 COM vtable에 사용되는 순서입니다. 클래스에서 이벤트를 노출하려면 이벤트 인터페이스에서 선언하고 DispId 특성을 사용하여 표시해야 합니다. 클래스는 이 인터페이스를 구현하면 안 됩니다.

클래스는 클래스 인터페이스를 구현합니다. 하나 이상의 인터페이스를 구현할 수 있지만 첫 번째 구현은 기본 클래스 인터페이스입니다. 여기에서 COM에 노출된 메서드 및 속성을 구현합니다. 공용이어야 하며 클래스 인터페이스의 선언과 일치해야 합니다. 또한 여기에서 클래스에 의해 발생된 이벤트를 선언합니다. 공용이어야 하며 이벤트 인터페이스의 선언과 일치해야 합니다.

예시

using System.Runtime.InteropServices;

namespace project_name
{
    [Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
    public interface ComClass1Interface
    {
    }

    [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ComClass1Events
    {
    }

    [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(ComClass1Events))]
    public class ComClass1 : ComClass1Interface
    {
    }
}

참고 항목