다음을 통해 공유


.NET Compact Framework에서 구조체 마샬링

업데이트: 2007년 11월

마샬링을 위해 배열 및 문자열을 구조체에 포함시킬 수 있습니다. MarshalAsAttribute 특성을 사용하여 포함된 문자열을 마샬링하는 방법을 지정해야 합니다. 그렇지 않으면 예외가 throw됩니다.

문자열을 wchar_t*,로 마샬링할 때는 유니코드 문자열에 대한 포인터로 마샬링하는 다음 특성 중 하나를 지정할 수 있습니다.

[MarshalAs(UnmanagedType.LPWStr)]

- 또는 -

[MarshalAs(UnmanagedType.LPTStr)]

다음 표에서는 비관리 코드의 배열 및 문자열을 관리 코드로 마샬링하기 위한 구조체 정의를 보여 줍니다. 이러한 예제 중 일부에서는 MarshalAsAttribute가 사용됩니다.

마샬링할 데이터

비관리 구조체(C++)

관리 구조체(C#)

정수 배열

typedef struct _MyStruct
{
  int intArray[10]; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.ByValArray, 
    SizeConst = 10)]
  int[] intArray;
}

문자 배열

typedef struct _MyStruct
{
  char charArray[10]; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.ByValArray, 
    SizeConst = 10)]
  char[] charArray;
}

문자열의 문자 배열

typedef struct _MyStruct
{
  char charArray[10]; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.ByValTStr, 
    SizeConst = 10)]
  String str;
}

문자열의 포인터

typedef struct _MyStruct
{
  wchar_t *pStr; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.LPWStr)]
  String str;
}

구조체 레이아웃 지정

StructLayoutAttribute 특성을 사용하여 플랫폼 호출 마샬러에 대한 구조체의 레이아웃을 지정할 수 있습니다. .NET Compact Framework에서는 세 가지 LayoutKind 열거형 값인 Auto(기본값), SequentialExplicit을 모두 지원합니다.

.NET Compact Framework에서 AutoSequential과 동일합니다.

Explicit 값이 지정되면 FieldOffsetAttribute 특성을 모든 필드에 적용해야 합니다. 바이트 값은 해당 형식의 경계 내에 있어야 합니다. 예를 들어, 2바이트 정수는 짝수 주소에서 시작되어야 하며 4바이트 정수는 4로 나눌 수 있는 주소에서 시작되어야 합니다.

StructLayoutAttribute.Pack 필드는 지원되지 않습니다.

참고 항목

기타 리소스

.NET Compact Framework의 마샬링 지원