Condividi tramite


Marshalling dei dati con platform invoke

Per chiamare le funzioni esportate da una libreria non gestita, un'applicazione .NET Framework richiede un prototipo di funzione nel codice gestito che rappresenta la funzione non gestita. Per creare un prototipo che consenta il marshalling corretto dei dati mediante platform invoke, occorre procedere nel modo seguente:

  • Applicare l'attributo DLLImportAttribute alla funzione o al metodo statico nel codice gestito.

  • Sostituire i tipi di dati non gestiti con i tipi di dati gestiti.

È possibile utilizzare la documentazione fornita con una funzione non gestita per costruire un prototipo gestito equivalente applicando l'attributo con i relativi campi facoltativi e sostituendo i tipi di dati non gestiti con quelli gestiti. Per istruzioni su come applicare l'attributo DllImportAttribute, vedere Utilizzo delle funzioni di DLL non gestite.

In questa sezione vengono forniti esempi che dimostrano come creare i prototipi di funzioni gestite per passare argomenti e ricevere valori restituiti da funzioni esportate dalle librerie non gestite. Negli esempi viene inoltre illustrato l'utilizzo dell'attributo MarshalAsAttribute e della classe Marshal per eseguire il marshalling esplicito dei dati.

In questa sezione

  • Tipi di dati di platform invoke
    Viene fornito un elenco di tipi di dati gestiti e dei corrispondenti tipi di dati non gestiti.

  • PinvokeLib.dll
    È riportato il codice in cui sono definite le funzioni di libreria fornite da Pinvoke.dll.

  • Marshalling di stringhe
    Viene descritto come passare le stringhe per valore, per riferimento, nelle strutture, nelle classi e nelle matrici.

  • Marshalling di classi, strutture e unioni
    Viene descritto come passare le classi per valore, come passare varie strutture e come passare le unioni con tipi valore e misti.

  • Marshalling di matrici di tipi
    Viene descritto come passare matrici multidimensionali di interi per valore e come passare matrici unidimensionali per riferimento.

  • Esempi vari di marshalling
    Vengono descritti aspetti della Garbage Collection e del threading che hanno effetto sul comportamento del marshalling di interoperabilità.

Sezioni correlate