COM은 다음과 같은 몇 가지 중요한 방법으로 .NET 런타임 개체 모델과 다릅니다.
COM 개체의 클라이언트는 해당 개체의 수명을 관리해야 합니다. 공용 언어 런타임은 해당 환경에서 개체의 수명을 관리합니다.
COM 개체의 클라이언트는 해당 서비스를 제공하는 인터페이스를 요청하고 인터페이스 포인터를 다시 가져오면 서비스를 사용할 수 있는지 여부를 검색합니다. .NET 개체의 클라이언트는 리플렉션을 사용하여 개체의 기능에 대한 설명을 가져올 수 있습니다.
NET 개체는 .NET 런타임 실행 환경에서 관리하는 메모리에 상주합니다. 실행 환경은 성능상의 이유로 메모리 내 개체를 이동하고 이동하는 개체에 대한 모든 참조를 업데이트할 수 있습니다. 관리되지 않는 클라이언트는 개체 지점에 대한 포인터를 획득하면 해당 개체가 같은 위치에 계속 있기 때문에 그에 의존합니다. 이러한 클라이언트에는 위치가 고정되지 않은 개체를 처리하는 메커니즘이 없습니다.
이러한 차이를 극복하기 위해 런타임은 관리되는 클라이언트와 관리되지 않는 클라이언트가 해당 환경 내에서 개체를 호출한다고 생각하게 하는 래퍼 클래스를 제공합니다. 관리되는 클라이언트가 COM 개체에서 메서드를 호출할 때마다 런타임은 RCW( 런타임 호출 가능 래퍼 )를 만듭니다. RCW는 관리되는 참조 메커니즘과 관리되지 않는 참조 메커니즘 간의 차이점을 추상화합니다. 또한 런타임은 프로세스를 되돌리기 위해 COM 호출 가능 래퍼 (CCW)를 만들어 COM 클라이언트가 .NET 개체에서 메서드를 원활하게 호출할 수 있도록 합니다. 다음 그림에서 볼 수 있듯이 호출 코드의 관점에 따라 런타임에서 만드는 래퍼 클래스가 결정됩니다.
대부분의 경우 런타임에서 생성된 표준 RCW 또는 CCW는 COM과 .NET 런타임 간의 경계를 넘은 호출에 적절한 마샬링을 제공합니다. 사용자 지정 특성을 사용하여 런타임이 관리 코드와 관리되지 않는 코드를 나타내는 방식을 선택적으로 조정할 수 있습니다.
참고하십시오
.NET