Marshalling di classi, strutture e unioni
In .NET Framework classi e strutture sono simili. Entrambe possono avere campi, proprietà ed eventi. nonché metodi static e non static. Una differenza fondamentale è data dal fatto che le strutture sono tipi di valore e le classi sono tipi di riferimento.
Nella seguente tabella sono elencate le opzioni di marshalling per le classi, le strutture e le unioni con la descrizione dell'uso e un collegamento all'esempio corrispondente di platform invoke.
Tipo |
Descrizione |
Esempio |
---|---|---|
Classe per valore. |
Passa una classe con membri integer come parametro in/out, come il case gestito. |
|
Struttura per valore. |
Passa le strutture come parametri in. |
|
Struttura per riferimento. |
Passa le strutture come parametri in/out. |
|
Struttura con strutture annidate (semplificata). |
Passa una classe che rappresenta una struttura con strutture annidate nella funzione non gestita. La struttura viene semplificata in una sola grande struttura nel prototipo gestito. |
|
Struttura con strutture annidate (non semplificata). |
Passa una struttura con una struttura incorporata. |
|
Struttura con puntatore a un'altra struttura. |
Passa una struttura che contiene un puntatore a una seconda struttura come membro. |
|
Matrice di strutture con integer per valore. |
Passa una matrice di strutture che contengono solo interi come un parametro in/out. È possibile modificare i membri della matrice. |
|
Matrice di strutture con interi e stringhe per riferimento. |
Passa una matrice di strutture che contengono interi e stringhe come un parametro out. La memoria per la matrice viene allocata dalla funzione chiamata. |
|
Unioni con tipi di valore. |
Passa le unioni con tipi di valore (integer e double). |
|
Unioni con tipi misti. |
Passa unioni con tipi misti (integer e string). |
|
Valori null nella struttura. |
Passa un riferimento null (Nothing in Visual Basic) invece di un riferimento a un tipo di valore. |
Vedere anche
Concetti
Tipi di dati di platform invoke
Marshalling di matrici di tipi