Share via


Blittable 형식 및 비 Blittable 형식

업데이트: 2010년 5월

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

플랫폼 호출로부터 반환되는 구조체는 blittable 형식이어야 합니다. 플랫폼 호출에서는 반환 형식으로 비 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 클래스 라이브러리 개요를 참조하십시오.

참고 항목

기타 리소스

기본 마샬링 동작

변경 기록

날짜

변경 내용

이유

2010년 5월

구조체에 적용되는 반환 형식의 제한 사항에 대한 명확한 설명이 추가되었습니다.

콘텐츠 버그 수정