Utilizzo esplicito di PInvoke in C++ (attributo DllImport)
Aggiornamento: novembre 2007
In .NET Framework sono disponibili funzionalità esplicite di richiamo piattaforma (PInvoke) con l'attributo Dllimport per consentire alle applicazioni gestite di chiamare funzioni non gestite assemblate nelle DLL. L'utilizzo esplicito di PInvoke è indispensabile nelle situazioni in cui le API non gestite sono assemblate come DLL e il codice sorgente non è disponibile, ad esempio per la chiamata delle funzioni Win32. Negli altri casi, è possibile utilizzare P{Invoke in modalità implicita. Per ulteriori informazioni, vedere Utilizzo delle funzionalità di interoperabilità C++ (PInvoke implicito).
Il funzionamento di PInvoke si basa sull'utilizzo di DllImportAttribute. Questo attributo, che accetta il nome della DLL come primo argomento, deve essere posizionato prima di una dichiarazione di funzione per ciascun punto di ingresso DLL che verrà utilizzato. La firma della funzione deve corrispondere al nome di una funzione esportata dalla DLL, anche se una qualche forma di conversione di tipo può essere comunque eseguita implicitamente definendo le dichiarazioni DllImport in termini di tipi gestiti.
Il risultato è un punto di ingresso gestito per ciascuna funzione DLL nativa che contiene il codice di transizione necessario (thunk) e semplici conversioni di dati. Le funzioni gestite possono quindi effettuare una chiamata nella DLL utilizzando questi punti di ingresso. Il codice inserito in un modulo a seguito di una chiamata PInvoke viene gestito interamente e l'utilizzo esplicito di PInvoke è supportato per le compilazioni /clr, /clr:pure e /clr:safe. Per ulteriori informazioni, vedere Codice pure e verificabile.
In questa sezione
Procedura: chiamare DLL native da codice gestito tramite PInvoke
Procedura: effettuare il marshalling di stringhe utilizzando PInvoke
Procedura: effettuare il marshalling di strutture tramite PInvoke
Procedura: effettuare il marshalling di matrici utilizzando PInvoke
Procedura: effettuare il marshalling di puntatori a funzione utilizzando PInvoke
Procedura: effettuare il marshalling di puntatori incorporati utilizzando PInvoke