선택한 인터페이스 마샬링

업데이트: 2007년 11월

RCW의 기본 목적은 관리되는 프로그래밍 모델과 관리되지 않는 프로그래밍 모델 간의 차이를 숨기는 데 있습니다. 매끄러운 전환을 위해 RCW는 다음 그림과 같이 선택한 COM 인터페이스를 .NET 클라이언트에 노출하지 않고 사용합니다.

COM 인터페이스와 RCW

인터페이스 포함 RCW

초기 바인딩 개체로 만드는 경우 RCW는 특정 형식이며, COM 개체에서 구현하는 인터페이스를 구현하고 해당 개체의 인터페이스에서 메서드, 속성 및 이벤트를 노출합니다. 위의 그림에서 RCW는 INew 인터페이스를 노출하지만 IUnknownIDispatch 인터페이스를 사용합니다. 또한 RCW는 INew 인터페이스의 모든 멤버를 .NET 클라이언트에 노출합니다.

RCW는 다음 표에 나열된 인터페이스를 사용하는데, 이 인터페이스는 RCW가 래핑하는 개체에 의해 노출됩니다.

인터페이스

설명

IDispatch

리플렉션을 통해 런타임에 COM 개체를 바인딩합니다.

IErrorInfo

오류, 오류 원인, 도움말 파일, 도움말 컨텍스트 및 오류를 정의한 인터페이스의 GUID(.NET 클래스의 경우 항상 GUID_NULL)에 대한 설명을 제공합니다.

IProvideClassInfo

래핑되는 COM 개체가 IProvideClassInfo를 구현하는 경우 RCW는 더 나은 형식 ID를 제공하기 위해 이 인터페이스에서 형식 정보를 추출합니다.

IUnknown

개체 ID, 형식 강제 변환 및 수명 관리의 경우

  • 개체 ID

    런타임은 각 개체에 대해 IUnknown 인터페이스의 값을 비교하여 COM 개체를 구별합니다.

  • 형식 강제 변환

    RCW는 QueryInterface 메서드에서 수행하는 동적 형식 검색을 인식합니다.

  • 수명 관리

    QueryInterface 메서드를 사용하면 RCW는 런타임에서 래퍼에 대해 관리되지 않는 개체를 해제하는 가비지 수집을 수행할 때까지 관리되지 않는 개체에 대한 참조를 가져와서 보유합니다.

RCW는 다음 표에 나열된 인터페이스를 선택적으로 사용하는데, 이 인터페이스는 RCW가 래핑하는 개체에 의해 노출됩니다.

인터페이스

설명

IConnectionPointIConnectionPointContainer

RCW는 연결 지점 이벤트 스타일을 노출하는 개체를 대리자 기반 이벤트로 변환합니다.

IDispatchEx

클래스가 IDispatchEx를 구현하는 경우 RCW는 IExpando를 구현합니다. IDispatchEx 인터페이스는 IDispatch 인터페이스의 확장이지만 IDispatch와 달리 열거형, 추가, 삭제 및 대/소문자를 구분하는 멤버 호출 등이 가능합니다.

IEnumVARIANT

열거형을 지원하는 COM 형식이 컬렉션으로 간주되게 합니다.

참고 항목

개념

RCW

상호 운용할 .NET 형식의 정규화

기타 리소스

어셈블리를 형식 라이브러리로 변환 요약