Condividi tramite


Supporto di tipi

Aggiornamento: novembre 2007

Nella tabella seguente vengono descritte le categorie di tipi e i risultati dei tipi di marshalling da contesti gestiti a non gestiti.

Categorie di tipi

Nella tabella seguente vengono forniti descrizioni e chiarimenti relativi a molti dei tipi menzionati nelle sezioni che seguono.

Tipo

Descrizione

Tipi di valore

I tipi valore contengono direttamente i dati descritti. La memoria per questi tipi viene allocata dallo stack.

Tipi valore incorporati

Int32, UInt32, Boolean, Single e così via. Per un elenco completo, vedere Cenni preliminari sulla libreria di classi .NET Framework.

Tipi valore definiti dall'utente

Derivata da System.ValueType. In C# i tipi valore definiti dall'utente vengono definiti mediante la parola chiave struct.

Enumerazioni

Anche le enumerazioni sono tipi valore. Il tipo sottostante di un'enumerazione in .NET Framework è Int32. È tuttavia possibile definire esplicitamente un tipo sottostante diverso. I tipi sottostanti supportati sono tipi base integrali ad eccezione di Char.

Tipo di riferimento

I tipi di riferimento consentono di memorizzare un riferimento alla memoria di un oggetto allocata nell'heap. Si può trattare di classi incorporate, classi definite dall'utente, matrici, tipi valore boxed, delegati e così via.

Da tipi gestiti a tipi non gestiti

Nella tabella riportata di seguito viene descritto il risultato del marshalling da tipi gestiti a tipi non gestiti.

Tipo gestito

Tipo non gestito

Tipo valore (inclusi quelli maggiori di 32 bit)

Non modificato.

Riferimento a un tipo valore

Puntatore al tipo valore.

Integer a 64 bit

Puntatore a matrice di tipi valore.

Numero a virgola mobile

Numero a virgola mobile.

Matrice di tipi valore

Puntatore a matrice di tipi valore.

Enum

Tipo valore sottostante dell'enumerazione.

Stringa ANSI

Supportato solo se passato come matrice di byte.

String

Puntatore a una matrice di caratteri Unicode (wchar_t) con terminazione null. La matrice non deve essere modificata dal codice non gestito.

Tipo di riferimento

Puntatore ai campi dati sottostanti dell'oggetto. I tipi di riferimento vengono sempre sottoposti a marshalling in modo sequenziale. È possibile effettuare il marshalling solo degli oggetti contenenti membri di tipo valore.

Riferimento a un tipo di riferimento

Non supportato.

Matrice di tipi di riferimento

Non supportato.

Delegato

Puntatore a funzione

StringBuilder

Puntatore a una matrice di caratteri Unicode (wchart_t) con terminazione null. La matrice può essere modificata dal codice non gestito.

Risultati del marshalling di C# e Visual Basic

Nella tabella riportata di seguito sono elencati i tipi C# e Visual Basic utilizzati dal gestore di marshalling per i tipi gestiti, con Windows CE come sistema operativo host del codice non gestito. Non si tratta di un elenco completo.

Codice gestito

Tipi C#

Codice gestito

Tipi Visual Basic

Codice non gestito

ByVal

Codice non gestito

ByRef

bool

Boolean

BYTE

BYTE *

int

Integer

INT32

INT32 *

short

Short

SHORT

SHORT *

long

Long

LONG

INT64 *

char

Char

WCHAR

WCHAR *

float

Single

FLOAT

FLOAT *

double

Double

DOUBLE

DOUBLE *

string

String

WCHAR *

Non supportato

StringBuilder

StringBuilder

WCHAR *

Non supportato

DateTime

DateTime

DATE

DATE *

int[]

Integer()

INT32 *, INT32[]

Non supportato

Supporto del tipo Variant

Nella tabella seguente sono elencati i tipi dall'enumerazione VARENUM supportati dal gestore di marshalling IDispatch per eseguire il marshalling da codice gestito a codice non gestito. In tutti i casi i tipi sono supportati sia a livello di parametri che di tipi restituiti. I tipi non supportati comprendono quelli non applicabili ai tipi Variant.

Tipi supportati

Tipi non supportati

VT_I2

VT_I4

VT_CY

VT_DATE

VT_BSTR

VT_DISPATCH

VT_ERROR

VT_BOOL

VT_VARIANT

VT_UNKNOWN

VT_DECIMAL

VT_I1

VT_UI1

VT_UI2

VT_UI4

VT_INT

VT_UINT

VT_ARRAY

VT_R8

VT_R4

VT_CF

VT_CLSID

VT_EMPTY

VT_NULL

VT_I8

VT_UI8

VT_USERDEFINED

VT_RECORD

VT_SAFEARRAY (utilizzare VT_ARRAY)

VT_PTR

VT_HRESULT

VT_VOID

VT_CARRAY

VT_LPSTR (utilizzare VT_BSTR)

VT_LPWSTR (utilizzare VT_BSTR)

VT_FILETIME

VT_BLOB

VT_STREAM

VT_STORAGE

VT_STREAMED_OBJECT

VT_STORED_OBJECT

VT_BLOB_OBJECT

VT_VECTOR

Vedere anche

Altre risorse

Supporto di marshalling in .NET Compact Framework