다음을 통해 공유


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.String null 참조로 종료되는 문자열 또는 BSTR로 변환합니다.
System.ValueType 고정된 메모리 레이아웃을 사용하는 구조로 변환합니다.
T[] C 스타일 배열 또는 SAFEARRAY로 변환합니다.

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

참고 항목