Utilizzo di funzioni di DLL non gestite

Platform invoke è un servizio che consente al codice gestito di chiamare funzioni non gestite implementate in librerie di collegamento dinamico (DLL), ad esempio quelle disponibili nell'API Windows. Individua e richiama una funzione esportata ed esegue il marshalling degli argomenti (Integer, stringhe, matrici, strutture e così via) nel limite dell'interazione, in base alle necessità.

In questa sezione vengono presentate le attività associate all'utilizzo di funzioni DLL non gestite e sono disponibili altre informazioni su platform invoke. Oltre alle seguenti attività, vengono illustrate alcune considerazioni generali e viene fornito un collegamento a informazioni ed esempi aggiuntivi.

Per usare le funzioni DLL esportate

  1. Identificare le funzioni nelle DLL.

    È necessario specificare almeno il nome della funzione e il nome della DLL che la contiene.

  2. Creare una classe che contenga le funzioni DLL.

    È possibile usare una classe esistente, creare una classe per ogni funzione non gestita o creare una classe contenente un set di funzioni non gestite correlate.

  3. Creare prototipi nel codice gestito.

    [Visual Basic] Usare l'istruzione Declare con le parole chiave Function e Lib. In pochissimi casi, è possibile usare DllImportAttribute con le parole chiave Shared Function. Questi casi vengono illustrati più avanti in questa sezione.

    [C#] Usare DllImportAttribute per identificare la DLL e la funzione. Contrassegnare il metodo con i modificatori static ed extern.

    [C++] Usare DllImportAttribute per identificare la DLL e la funzione. Contrassegnare il metodo o la funzione wrapper con extern "C".

  4. Chiamare una funzione DLL.

    Chiamare il metodo sulla classe gestita come qualsiasi altro metodo gestito. Il passaggio di strutture e l'implementazione di funzioni di callback sono casi particolari.

Per alcuni esempi che mostrano come costruire dichiarazioni basate su .NET da usare con platform invoke, vedere Marshalling dei dati con platform invoke.

Informazioni dettagliate su platform invoke

Platform invoke si basa sui metadati per individuare le funzioni esportate ed effettuare il marshalling degli argomenti in fase di esecuzione. Questo processo viene illustrato nella figura seguente.

Diagram that shows a platform invoke call.

Quando platform invoke chiama una funzione non gestita, esegue la sequenza di azioni seguente:

  1. Individua la DLL contenente la funziona.

  2. Carica la DLL in memoria.

  3. Individua l'indirizzo della funzione in memoria ed effettua il push degli argomenti nello stack, effettuando il marshalling dei dati in base alle necessità.

    Nota

    L'individuazione e il caricamento della DLL e l'individuazione dell'indirizzo della funzione in memoria si verificano solo alla prima chiamata alla funzione.

  4. Trasferisce il controllo alla funzione non gestita.

Platform invoke dà luogo a eccezioni generate dalla funzione non gestita per il chiamante gestito.

Vedi anche