Utilizzo di funzioni di DLL non gestiteConsuming Unmanaged DLL Functions

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.Platform invoke is a service that enables managed code to call unmanaged functions implemented in dynamic link libraries (DLLs), such as those in the Windows API. 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à.It locates and invokes an exported function and marshals its arguments (integers, strings, arrays, structures, and so on) across the interoperation boundary as needed.

In questa sezione vengono presentate le attività associate all'utilizzo di funzioni DLL non gestite e sono disponibili altre informazioni su platform invoke.This section introduces tasks associated with consuming unmanaged DLL functions and provides more information about platform invoke. Oltre alle seguenti attività, vengono illustrate alcune considerazioni generali e viene fornito un collegamento a informazioni ed esempi aggiuntivi.In addition to the following tasks, there are general considerations and a link providing additional information and examples.

Per usare le funzioni DLL esportateTo consume exported DLL functions

  1. Identificare le funzioni nelle DLL.Identify functions in DLLs.

    È necessario specificare almeno il nome della funzione e il nome della DLL che la contiene.Minimally, you must specify the name of the function and name of the DLL that contains it.

  2. Creare una classe che contenga le funzioni DLL.Create a class to hold DLL functions.

    È 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.You can use an existing class, create an individual class for each unmanaged function, or create one class that contains a set of related unmanaged functions.

  3. Creare prototipi nel codice gestito.Create prototypes in managed code.

    [Visual Basic] Usare l'istruzione Declare con le parole chiave Function e Lib.[Visual Basic] Use the Declare statement with the Function and Lib keywords. In pochissimi casi, è possibile usare DllImportAttribute con le parole chiave Shared Function.In some rare cases, you can use the DllImportAttribute with the Shared Function keywords. Questi casi vengono illustrati più avanti in questa sezione.These cases are explained later in this section.

    [C#] Usare DllImportAttribute per identificare la DLL e la funzione.[C#] Use the DllImportAttribute to identify the DLL and function. Contrassegnare il metodo con i modificatori static ed extern.Mark the method with the static and extern modifiers.

    [C++] Usare DllImportAttribute per identificare la DLL e la funzione.[C++] Use the DllImportAttribute to identify the DLL and function. Contrassegnare il metodo o la funzione wrapper con extern "C" .Mark the wrapper method or function with extern "C".

  4. Chiamare una funzione DLL.Call a DLL function.

    Chiamare il metodo sulla classe gestita come qualsiasi altro metodo gestito.Call the method on your managed class as you would any other managed method. Il passaggio di strutture e l'implementazione di funzioni di callback sono casi particolari.Passing structures and implementing callback functions are special cases.

Per alcuni esempi che mostrano come costruire dichiarazioni basate su .NET da usare con platform invoke, vedere , vedere Marshalling dei dati con platform invoke.For examples that demonstrate how to construct .NET-based declarations to be used with platform invoke, see Marshaling Data with Platform Invoke.

Informazioni dettagliate su platform invokeA closer look at platform invoke

Platform invoke si basa sui metadati per individuare le funzioni esportate ed effettuare il marshalling degli argomenti in fase di esecuzione.Platform invoke relies on metadata to locate exported functions and marshal their arguments at run time. Nella figura seguente viene illustrato questo processo.The following illustration shows this process.

Diagramma che illustra una chiamata PInvoke.

Quando platform invoke chiama una funzione non gestita, esegue la sequenza di azioni seguente:When platform invoke calls an unmanaged function, it performs the following sequence of actions:

  1. Individua la DLL contenente la funziona.Locates the DLL containing the function.

  2. Carica la DLL in memoria.Loads the DLL into memory.

  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à.Locates the address of the function in memory and pushes its arguments onto the stack, marshaling data as required.

    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.Locating and loading the DLL, and locating the address of the function in memory occur only on the first call to the function.

  4. Trasferisce il controllo alla funzione non gestita.Transfers control to the unmanaged function.

Platform invoke dà luogo a eccezioni generate dalla funzione non gestita per il chiamante gestito.Platform invoke throws exceptions generated by the unmanaged function to the managed caller.

Vedere ancheSee also