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. |
Tipo valore sottostante dell'enumerazione. |
|
Stringa ANSI |
Supportato solo se passato come matrice di byte. |
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 |
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 |
WCHAR * |
Non supportato |
||
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 |