COM 인터페이스 시뮬레이션
CCW는 공용의 모든 COM 표시 인터페이스, 데이터 형식 및 반환 값을 COM의 인터페이스 기반 상호 작용과 일치하는 방식으로 COM 클라이언트에 노출합니다. COM 클라이언트의 경우 .NET Framework 개체에서 메서드를 호출하는 것은 COM 개체에서 메서드를 호출하는 것과 같습니다.
이러한 원만한 접근을 위해 CCW는 IUnknown과 IDispatch 같은 기존의 COM 인터페이스를 만듭니다. 다음 그림과 같이 CCW는 자신이 래핑하는 .NET 개체에서 단일 참조를 유지 관리합니다. COM 클라이언트와 .NET 개체 둘 다 CCW의 스텁 구성과 프록시를 통해 상호 작용합니다.
COM 인터페이스와 CCW
관리되는 환경에서 클래스에 의해 명시적으로 구현되는 인터페이스를 노출하는 것 이외에도 .NET Framework는 개체 대신 다음 표에 나열된 COM 인터페이스 구현을 제공합니다. .NET 클래스는 이 인터페이스 구현을 제공하여 기본 동작을 재정의할 수 있습니다. 그러나 런타임은 항상 IUnknown 및 IDispatch 인터페이스 구현을 제공합니다.
Interface |
설명 |
---|---|
Idispatch |
형식화할 런타임에 바인딩을 위한 메커니즘을 제공합니다. |
IerrorInfo |
오류, 오류 원인, 도움말 파일, 도움말 컨텍스트 및 오류를 정의한 인터페이스의 GUID(.NET 클래스의 경우 항상 GUID_NULL)에 대한 설명을 제공합니다. |
IprovideClassInfo |
COM 클라이언트가 관리되는 클래스에 의해 구현된 ITypeInfo 인터페이스에 액세스할 수 있도록 합니다. |
IsupportErrorInfo |
COM 클라이언트가 관리되는 개체에서 IErrorInfo 인터페이스를 지원하는지 여부를 확인할 수 있도록 합니다. 지원하는 경우 클라이언트는 마지막 예외 개체에 대한 포인터를 얻을 수 있습니다. 관리되는 모든 형식은 IErrorInfo 인터페이스를 지원합니다. |
ItypeInfo |
Tlbexp.exe에서 생성된 형식 정보와 정확히 일치하는 클래스의 형식 정보를 제공합니다. |
Iunknown |
COM 클라이언트가 CCW의 수명을 관리하고 형식 강제 변환을 제공하는 데 사용할 IUnknown 인터페이스의 표준 구현을 제공합니다. |
또한 관리되는 클래스는 다음 표에서 설명하는 COM 인터페이스를 제공합니다.
Interface |
설명 |
---|---|
(_classname) 클래스 인터페이스 |
런타임에서 노출되고 명시적으로 정의되지 않았으며, 관리되는 개체에서 명시적으로 노출된 모든 공용 인터페이스, 메서드, 속성 및 필드를 노출하는 인터페이스 |
IConnectionPoint 및 IConnectionPointContainer |
대리자 기반 이벤트의 소스가 되는 개체의 인터페이스(이벤트 등록자를 등록하기 위한 인터페이스) |
IdispatchEx |
클래스가 IExpando를 구현하는 경우 런타임에서 제공하는 인터페이스. IDispatchEx 인터페이스는 IDispatch 인터페이스의 확장이지만 IDispatch와 달리 열거형, 추가, 삭제 및 대/소문자를 구분하는 멤버 호출 등이 가능합니다. |
IEnumVARIANT |
컬렉션 형식 클래스의 인터페이스. 이 인터페이스는 클래스가 IEnumerable을 구현하는 경우 컬렉션의 개체를 열거합니다. |