다음을 통해 공유


상호 운용을 위한 일반 고려 사항

업데이트: 2007년 11월

관리 코드와 비관리 코드 간에 호출을 수행할 때는 항상 각 프로그래밍 모델에서 규정하는 요구 사항에 맞게 조정해야 합니다. 관리되는 프로그래밍 모델과 관리되지 않는 프로그래밍 모델은 여러 가지 면에서 서로 다릅니다. 다음 표에서는 각 모델의 정의상 특징을 보여 줍니다.

특징

관리되지 않는 모델

관리되는 모델

코딩 모델

인터페이스 기반

개체 기반

ID

GUID

강력한 이름

오류 처리 메커니즘

HRESULT

예외

형식 호환성

이진 표준

형식 표준

형식 정의

형식 라이브러리

메타데이터

형식 안전성

형식이 안전하지 않음

선택적으로 안전함

버전 관리

변경할 수 없음

탄력적

프로그래밍 모델의 일부 특징에는 형식 라이브러리 및 메타데이터 같이 사용자가 볼 수 있는 엔터티가 연관되어 있습니다. 이러한 특징 중 일부는 GUID 및 강력한 이름과 같은 인수로 전달할 수 있습니다. 다른 특징은 더 개념적입니다. 즉, 각 특징이 응용 프로그램 디자인에 미치는 영향을 고려해야 하지만 이러한 특징에 대해 관리되는 모델과 관리되지 않는 모델을 직접 매핑해야 하는 경우는 없습니다.

다음 단원에서는 각 특징에 대해 보다 자세히 설명합니다.

  • 코딩 모델
    관리되지 않는 개체는 항상 인터페이스를 통해 통신하며, 관리되는 개체 및 클래스는 인터페이스를 구현하지 않고도 직접 데이터를 전달할 수 있습니다.

    기본적으로 COM interop에서는 개체 또는 클래스가 인터페이스를 구현하지 않는 경우 클래스 인터페이스를 생성함으로써 인터페이스를 통해 COM에 관리되는 기능을 노출합니다.

  • 오류 처리 메커니즘
    COM 메서드는 대개 호출의 성공 또는 실패 여부를 나타내는 HRESULT를 반환합니다. 관리 코드에서는 예외를 통합합니다. 기본적으로 COM interop에서는 관리되는 예외를 실패 HRESULT에 매핑합니다.

  • ID
    GUID는 관리되지 않는 특정 형식을 식별하며 해당 형식에 대한 위치 정보는 제공하지 않습니다. 강력한 이름은 고유 어셈블리 이름과 형식 이름으로 구성됩니다. 어셈블리 이름은 형식을 고유하게 식별하므로 여러 어셈블리에서 하나의 형식 이름을 다시 사용할 수 있습니다. 어셈블리에서는 관리되는 형식에 대해 게시자 키, 버전 및 위치 정보도 알려 줍니다. 상호 운용 서비스에서는 GUID를 생성하며 필요한 경우에 강력한 이름을 사용합니다.

  • PODS(Plain Old Data Structures)
    플랫폼 호출은 생성자를 포함하는 구조체 또는 클래스를 값으로 반환하는 데 사용할 수 없습니다. 일반적으로 PODS가 아닌 요소를 포함하는 사용자 정의 형식은 참조로 반환되어야 합니다. PODS는 ISO/IEC 표준 14882, "Programming Languages — C++"에서 정의한 대로 가장 기본적인 필드 값 컬렉션만 포함하는 데이터 구조체입니다. 이 구조체에는 생성자, 복사 할당 연산자, 소멸자 또는 PODS가 아닌 비정적 데이터 멤버가 포함되지 않습니다.

  • 형식 호환성
    형식은 관리 코드와 비관리 코드 간에 다양하며 언어 간에도 다양합니다.

  • 형식 정의
    형식 라이브러리를 사용하는 데 익숙한 사용자는 형식 라이브러리에 공용 형식만 포함된다는 것을 알고 있을 것입니다. 더우기 형식 라이브러리는 선택적입니다. 관리되는 프로그래밍 모델에서는 모든 형식에 대해 형식 정보가 필수적입니다. 상호 운용 서비스에서는 형식 라이브러리를 어셈블리의 메타데이터로 변환하고 메타데이터를 형식 라이브러리로 변환하는 도구를 제공합니다.

  • 형식 안전성
    관리되지 않는 컴파일러에서는 포인터 형식에 대해 형식 검사를 수행하지 않으므로 코드가 잠재적 위험성이 있는 작업에 영향을 받기 쉽습니다. 일반적으로 관리 코드에서는 높은 수준의 신뢰를 필요로 합니다. 프로그래머는 안전하지 않은 동작 때문에 관리 코드에 제한이 있는 경우에도 해당 코드에서 포인터를 계속 사용할 수 있습니다. 상호 운용 서비스에서는 신뢰할 수 없는 관리 코드에서 비관리 코드에 액세스할 수 없도록 합니다.

  • 버전 관리
    COM 인터페이스는 변경할 수 없습니다. 인터페이스를 변경하는 경우에는 새 GUID를 사용하여 인터페이스 이름을 다시 지정해야 합니다. 관리되는 형식은 같은 이름을 그대로 사용하면서 기능이 향상될 수 있습니다.

참고 항목

기타 리소스

상호 운용을 위한 디자인 고려 사항