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 |
|
|
Array von Zeichen |
|
|
Array von Zeichen in Zeichenfolge |
|
|
Zeiger auf Zeichenfolge |
|
|
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.