Esempi vari di marshalling
I fattori come le operazioni di Garbage Collection e di threading possono avere effetto sul comportamento del gestore di marshalling di interoperabilità. Alcune piccole differenze nella programmazione e nei modelli dei tipi, inoltre, possono rendere confuso il passaggio di dati a una libreria non gestita. In questa sezione viene fornito un insieme di esempi relativi ad alcune di queste differenze.
Nella seguente tabella sono elencate le opzioni di marshalling per vari tipi di elementi con la descrizione dell'uso e un collegamento all'esempio corrispondente.
Tipo di elemento |
Descrizione |
Esempio |
---|---|---|
Puntatore a funzione |
Passa un delegato a una funzione non gestita per la quale è previsto un puntatore a funzione. |
|
Utilizza la struttura HandleRef per evitare la procedura di Garbage Collection. |
||
LPARAM |
Utilizza la struttura GCHandle per passare un oggetto gestito a una funzione non gestita per la quale è previsto un tipo LPARAM. |
|
Apartment a thread singolo (STA, Single-Threaded Apartment)/apartment con multithreading (MTA, Multithreaded Apartment) |
Cambia le impostazioni di apartment predefinite quando una funzione non gestita chiama CoInitialize. |
|
void* |
Chiama una funzione il cui parametro è void*. |
Vedere anche
Concetti
Tipi di dati di platform invoke
Marshalling di classi, strutture e unioni
Marshalling di matrici di tipi