Blittable 형식 및 비 Blittable 형식

대부분의 데이터 형식은 관리되는 메모리와 관리되지 않는 메모리 둘 다에서 공통된 표현을 사용하며 interop 마샬러의 특별한 처리가 필요하지 않습니다. 이러한 형식은 관리 코드와 비관리 코드 간에 전달될 때 변환이 필요하지 않기 때문에 blittable 형식이라고 합니다.

플랫폼 호출에서 반환되는 구조는 blittable 형식이어야 합니다. 플랫폼 호출은 비 blittable 구조를 반환 형식으로 지원하지 않습니다.

System 네임스페이스의 다음 형식은 blittable 형식입니다.

다음 복합 형식도 blittable 형식입니다.

  • 정수 배열 등 blittable 기본 형식의 1차원 배열. 그러나 blittable 형식의 변수 배열을 포함하는 형식 자체는 blittable이 아닙니다.

  • blittable 형식(및 서식이 지정된 형식으로 마샬링된 경우 클래스)만 포함하는 서식이 지정된 값 형식. 서식이 지정된 값 형식에 대한 자세한 내용은 값 형식에 대한 기본 마샬링을 참조하세요.

개체 참조는 blittable이 아닙니다. 여기에는 그 자체가 blittable인 개체에 대한 참조 배열이 포함됩니다. 예를 들어 blittable인 구조를 정의할 수 있지만 이러한 구조에 대한 참조 배열을 포함하는 blittable 형식을 정의할 수 없습니다.

최적화로, blittable 기본 형식의 배열 및 blittable 멤버만 포함하는 클래스는 마샬링 중 복사되지 않고 고정됩니다. 호출자와 호출 수신자가 동일한 아파트에 있을 경우 이러한 형식은 In/Out 매개 변수로 마샬링되는 것처럼 보일 수 있습니다. 그러나 이러한 형식은 실제로 In 매개 변수로 마샬링되며, 인수를 In/Out 매개 변수로 마샬링하려는 경우 InAttributeOutAttribute 특성을 적용해야 합니다.

관리되는 일부 데이터 형식은 관리되지 않는 환경에서 다른 표현이 필요합니다. 이러한 비 blittable 데이터 형식을 마샬링할 수 있는 형식으로 변환해야 합니다. 예를 들어 관리형 문자열은 문자열 개체로 변환해야 마샬링할 수 있기 때문에 비 blittable 형식입니다.

다음 표에는 System 네임스페이스의 비 blittable 형식이 나와 있습니다. 정적 메서드 또는 클래스 인스턴스를 참조하는 데이터 구조인 대리자도 비 blittable입니다.

비 blittable 형식 설명
System.Array C 스타일 배열 또는 SAFEARRAY로 변환합니다.
System.Boolean true가 1 또는 -1인 1, 2 또는 4바이트 값으로 변환합니다.
System.Char 유니코드 또는 ANSI 문자로 변환합니다.
System.Class 클래스 인터페이스로 변환합니다.
System.Object Variant 또는 인터페이스로 변환합니다.
System.Mdarray C 스타일 배열 또는 SAFEARRAY로 변환합니다.
System.String null 참조로 종료되는 문자열 또는 BSTR로 변환합니다.
System.Valuetype 고정된 메모리 레이아웃을 사용하는 구조로 변환합니다.
System.Szarray C 스타일 배열 또는 SAFEARRAY로 변환합니다.

클래스 및 개체 형식은 COM interop에서만 지원됩니다. Visual Basic, C# 및 C++의 해당 형식은 클래스 라이브러리 개요를 참조하세요.

참고 항목