다음을 통해 공유


Blittable 형식 및 비 Blittable 형식

업데이트: 2007년 11월

대부분의 데이터 형식에는 관리되는 메모리와 관리되지 않는 메모리 모두에서 공통되는 표현이 있으므로, interop 마샬러에서 특별한 처리를 하지 않아도 됩니다. 이러한 형식은 관리 코드와 비관리 코드 사이에서 전달될 때 변환할 필요가 없으므로 blittable 형식이라고 합니다.

System 네임스페이스에 있는 다음 형식은 blittable 형식입니다.

다음의 복잡한 형식도 blittable 형식입니다.

  • blittable 형식의 1차원 배열(예: 정수 배열). 그러나 blittable 형식의 가변 배열이 들어 있는 형식은 blittable 형식이 아닙니다.

  • 일반적으로는 blittable 형식만 포함하고, 특별히 formatted 형식으로 마샬링된 경우에는 클래스도 포함하는 formatted 값 형식. formatted 값 형식에 대한 자세한 내용은 값 형식에 대한 기본 마샬링을 참조하십시오.

개체 참조는 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 2005, C# 및 C++에서의 이러한 형식을 보려면 .NET Framework 클래스 라이브러리 개요를 참조하십시오.

참고 항목

기타 리소스

기본 마샬링 동작