Empacotamento de estruturas no .NET Compact Framework

Você pode incorporar matrizes e sequências de caracteres em estruturas para empacotamento.Você deve usar o MarshalAsAttribute o atributo para especificar como você deseja que as seqüências de caracteres incorporadas sejam empacotadas, caso contrário uma exceção é lançada.

Quando faz o realizar marshaling de uma seqüência de caracteres para um wchar_t*, Você pode especificar um dos atributos a seguintes, que serão empacotado sistema autônomo um ponteiro para uma seqüência de caracteres Unicode:

[MarshalAs(UnmanagedType.LPWStr)]

- ou -

[MarshalAs(UnmanagedType.LPTStr)]

A tabela a seguir mostra definições de estruturas para empacotamento de matrizes e strings de código não gerenciado para gerenciado.Observe que alguns destes exemplos usam o MarshalAsAttribute.

Dados para empacotar

Estrutura não gerenciada (C++)

Estrutura gerenciada (C#)

Matriz de inteiros

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

Matriz de caracteres

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

Matriz de caracteres para string

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

Ponteiro para string

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

Especificando um layout de estrutura

Você pode especificar como layout de estruturas para a plataforma empacotador da invocação com o StructLayoutAttribute atributo. O .NET Compact estrutura suporta todos os três LayoutKind valores de enumeração: Auto (padrão) Sequential, e Explicit.

No .NET Compact estrutura, Auto é equivalente a Sequential.

Quando um Explicit valor for especificado, um FieldOffsetAttribute atributo deve ser aplicado a cada campo. Os valores dos bytes devem estar dentro do limite do tipo.Por exemplo, inteiros de 2 bytes devem iniciar em endereços pares, inteiros de 4 bytes devem iniciar em endereços divisíveis por 4, e assim por diante.

Observe que o StructLayoutAttribute.Pack Não há suporte para o campo.

Consulte também

Outros recursos

Suporte de marshaling no .NET Compact estrutura