Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.