다음을 통해 공유


System.Runtime.InteropServices.ComWrappers 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

API는 ComWrappers 기본 제공 COM 상호 운용성 지원과는 별개로 API에 대한 IUnknown 지원을 제공합니다. API는 ComWrappers 개발자가 기본 제공 버전을 효율적인 방식으로 교체하는 데 필요한 최소 런타임 지원을 노출합니다.

일반적으로 런타임에서는 관리되는 개체에 대한 네이티브 프록시를 CCW(COM Callable Wrapper)라고 하며 네이티브 개체에 대한 관리 프록시를 RCW(런타임 호출 가능 래퍼)라고 합니다. 그러나 여기서 사용하는 경우 해당 용어는 동일한 이름(즉, CCW 및 RCW)의 기본 제공 기능과 혼동해서는 안 됩니다. 기본 제공 기능과 달리 정확한 수명 관리, 디스패치 메서드 및 인수 및 반환 값 마샬링에 대한 책임의 대부분은 구현자에 맡 ComWrappers 깁니다.

"최소 지원"은 다음 기능으로 정의됩니다.

  1. 관리되는 개체와 네이티브 프록시(예: CCW) 간의 효율적인 매핑입니다.
  2. 네이티브 IUnknown 프록시와 관리되는 프록시 간의 효율적인 매핑(예: RCW).
  3. IReferenceTrackerHost 인터페이스 계약을 통해 가비지 수집기와 통합합니다.

이를 활용하는 것은 고급 시나리오입니다.

프록시 상태

이 섹션에서는 각 프록시를 만든 후 네이티브 및 관리 프록시 상태에 대한 설명과 그림을 제공합니다.

다음 그림에서 강력한 참조는 실선(===)으로 표시되고 약한 참조는 파선(= = =)으로 표시됩니다. "강력한 참조" 및 "약한 참조"라는 용어는 특정 구현을 의미하는 것이 아니라 "수명 연장" 및 "수명 연장 안 함"으로 해석되어야 합니다.

다음 그림에서는 호출 후 관리되는 개체 및 네이티브 프록시의 상태를 보여 줍니다 ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags).

 --------------------                  ----------------------
|   Managed object   |                |     Native proxy     |
|                    |                | Ref count: 1         |
|  ----------------  |                |  ------------------  |
| | Weak reference |=| = = = = = = = >| | Strong reference | |
| |    to proxy    | |<===============|=|    to object     | |
|  ----------------  |                |  ------------------  |
 --------------------                  ----------------------

다음 그림에서는 호출 후 네이티브 개체 및 관리 프록시의 상태를 보여 줍니다 ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags). "ID"의 개념은 에 대한 IUnknown규칙을 따릅니다.

 ------------------               ------------------
|  Native object   |< = = = = = =|                  |
| Ref count: +1    |             | Mapping from     |
 ------------------              | native identity  |
 ------------------------        | to managed proxy |
|   Managed proxy        |< = = =|                  |
| Created by ComWrappers |        ------------------
|   implementer.        |
| Optional AddRef() on   |
|   native object.      |
 ------------------------

런타임 관점에서 약한 참조만 존재하는지 확인합니다. 네이티브 개체에 대한 참조 수는 +1 네이티브 개체와 해당 관리 프록시 간의 연결된 수명을 보장하기 위해 관리되는 프록시 작성자(즉, ComWrappers 구현자)가 수행하는 것으로 간주됩니다. 이전에 멘션 시나리오(3)를 지원하는 데 사용되는 관리 프록시에 멘션 선택적 강력한 참조(즉AddRef(), )가 있습니다. CreateObjectFlags.TrackerObject을(를) 참조하세요. 이 선택적 강력한 참조를 사용하면 참조 수가 +2됩니다.