Strutture di marshalling in .NET Compact Framework
Aggiornamento: novembre 2007
È possibile incorporare matrici e stringhe in strutture per il marshalling. È necessario utilizzare l'attributo MarshalAsAttribute per specificare come si desidera effettuare il marshalling delle stringhe incorporate, in caso contrario verrà generata un'eccezione.
Quando si effettua il marshalling di una stringa in wchar_t*, è possibile specificare uno dei seguenti attributi per il quale verrà eseguito il marshalling come puntatore a una stringa Unicode:
[MarshalAs(UnmanagedType.LPWStr)]
-oppure-
[MarshalAs(UnmanagedType.LPTStr)]
Nella tabella seguente vengono illustrate le definizioni della struttura per effettuare il marshalling di matrici e stringhe da codice non gestito a codice gestito. In alcuni di questi esempi viene utilizzata la classe MarshalAsAttribute.
Dati per i quali effettuare il marshalling |
Struttura non gestita (C++) |
Struttura gestita (C#) |
---|---|---|
Matrice di numeri interi |
|
|
Matrice di caratteri |
|
|
Matrice di caratteri in stringa |
|
|
Puntatore a una stringa |
|
|
Specifica del layout di una struttura
È possibile specificare come disporre le strutture per il gestore di marshalling del richiamo piattaforma con l'attributo StructLayoutAttribute. .NET Compact Framework supporta i tre valori di enumerazione LayoutKind: Auto (predefinito), Sequential e Explicit.
In .NET Compact Framework Auto è equivalente a Sequential.
Quando viene specificato un valore Explicit, è necessario applicare un attributo FieldOffsetAttribute a ogni campo. I valori di byte devono essere compresi entro i limiti del tipo. Ad esempio, i numeri interi a 2 byte devono iniziare su indirizzi pari, i numeri interi a 4 byte su indirizzi divisibili per 4 e così via.
Il campo StructLayoutAttribute.Pack non è supportato.