Freigeben über


Marshalling von Strukturen in .NET Compact Framework

Aktualisiert: November 2007

Arrays und Zeichenfolgen können für das Marshalling in Strukturen eingebettet werden. Sie müssen mit dem MarshalAsAttribute-Attribut angeben, wie die eingebetteten Zeichenfolgen gemarshallt werden sollen. Andernfalls wird eine Ausnahme ausgelöst.

Beim Marshalling einer Zeichenfolge in einen Wert vom Typ wchar_t*, können Sie eines der folgenden Attribute angeben, die bewirken, dass das Marshalling als Zeiger auf eine Unicode-Zeichenfolge durchgeführt wird:

[MarshalAs(UnmanagedType.LPWStr)]

- oder -

[MarshalAs(UnmanagedType.LPTStr)]

In der folgenden Tabelle werden Strukturdefinitionen für das Marshallen von Arrays und Zeichenfolgen von nicht verwaltetem in verwalteten Code gezeigt. Beachten Sie, dass in einigen dieser Beispiele das MarshalAsAttribute-Attribut verwendet wird.

Marshallingdaten

Nicht verwaltete Struktur (C++)

Verwaltete Struktur (C#)

Array von ganzen Zahlen

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

Array von Zeichen

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

Array von Zeichen in Zeichenfolge

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

Zeiger auf Zeichenfolge

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

Angeben eines Strukturlayouts

Sie können mit dem StructLayoutAttribute-Attribut angeben, wie Strukturen für den Plattformaufrufmarshaller angelegt werden sollen. .NET Compact Framework unterstützt alle drei LayoutKind-Enumerationswerte: Auto (Standard), Sequential und Explicit.

In .NET CompactFramework ist Auto gleichbedeutend mit Sequential.

Wenn ein Explicit-Wert angegeben wird, muss jedem Feld ein FieldOffsetAttribute-Attribut zugeordnet werden. Die Bytewerte müssen innerhalb der Begrenzung des Typs liegen. Beispielsweise müssen ganze Zahlen mit 2 Bytes an geradzahligen Adressen beginnen, ganze Zahlen mit 4 Bytes müssen an durch 4 teilbaren Adressen beginnen usw.

Beachten Sie, dass das StructLayoutAttribute.Pack-Feld nicht unterstützt wird.

Siehe auch

Weitere Ressourcen

Unterstützung von Marshalling in .NET Compact Framework