다음을 통해 공유


Blittable 형식 및 비 Blittable 형식

대부분의 데이터 형식은 관리되는 메모리와 관리되지 않는 메모리 모두에서 공통적인 표현을 가지며 interop 마샬러에 의한 특별한 처리가 필요하지 않습니다. 이러한 형식은 관리 코드와 관리되지 않는 코드 간에 전달될 때 변환이 필요하지 않으므로 Blittable 형식 이라고 합니다.

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

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

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

  • 정수 배열 등 blittable 기본 형식의 1차원 배열. 그러나 blittable 형식의 변수 배열을 포함하는 형식 자체는 blittable이 아닙니다.
  • Blittable 형식만 포함하는 형식화된 값 형식(및 형식화된 형식으로 마샬링된 경우 클래스). 서식이 지정된 값 형식에 대한 자세한 내용은 값 형식에 대한 기본 마샬링을 참조하세요.

개체 참조는 비트 단위 복사가 불가능합니다. 또한 자체적으로 Blittable인 개체에 대한 참조 배열은 Blittable이 아닙니다. 예를 들어 Blittable 구조체를 정의할 수 있지만 해당 구조에 대한 참조 배열을 포함하는 Blittable 형식을 정의할 수는 없습니다.

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

관리되는 일부 데이터 형식은 관리되지 않는 환경에서 다른 표현이 필요합니다. 이러한 nonblittable 데이터 형식은 마샬링할 수 있는 양식으로 변환되어야 합니다. 예를 들어 관리되는 문자열은 블리트를 지원하지 않는 형식이므로, 마샬링하기 전에 문자열 개체로 변환해야 합니다.

다음 표는 System 네임스페이스의 비블릿 가능 형식을 나열합니다. 정적 메서드 또는 클래스 인스턴스를 참조하는 데이터 구조인 대리자는 또한 비블릿 가능하지 않습니다.

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

클래스 및 개체 형식은 COM interop에서만 지원됩니다.

참고 항목